php - 即使在 PHP 中多次尝试后,MySQL 连接仍无法正常工作

标签 php mysql

<分区>

我确定我可能犯了小错误,但我无法发现错误。我不明白为什么我不能在 MySQL 中使用连接查询。

我在数据库中有三个关系表:

  1. 主题
  2. class_subject

代码是:

   CREATE  TABLE IF NOT EXISTS `class` (
  `ClassID` INT(11) NOT NULL AUTO_INCREMENT ,
  `Class` VARCHAR(500)  NULL DEFAULT NULL ,
  `Section` VARCHAR(500)  NULL DEFAULT NULL ,
  PRIMARY KEY (`ClassID`))

ENGINE = InnoDB
AUTO_INCREMENT = 15
DEFAULT CHARACTER SET = utf8;


INSERT INTO `class`(`ClassID`, `Class`, `Section`) VALUES ('1','1','A'), ('2','1','B'), ('3','1','C'), ('4','1','D') ;

    CREATE  TABLE IF NOT EXISTS `Subject` (
  `SubjectID` INT(11) NOT NULL AUTO_INCREMENT ,
  `Subject` VARCHAR(45) NULL,

  PRIMARY KEY (`SubjectID`))


ENGINE = InnoDB
AUTO_INCREMENT = 53
DEFAULT CHARACTER SET = utf8;

INSERT INTO `Subject`(`SubjectID`, `Subject`) VALUES ('1','English'),('2','Hindi'),('3','Maths'),('4','Science'),('5','Social Science'),('6','Sports'),('7','Physics'), ('8','Chemistry'), ('9','Statistics'), ('10','Computers');

和...

    CREATE TABLE IF NOT EXISTS  `class_subject` (
ClassID INT (11) NOT NULL,  
SubjectID INT (11) NOT NULL,  
PRIMARY KEY (ClassID, SubjectID),  
INDEX `subject_order_idx` (`ClassID` ASC) ,
  CONSTRAINT `class_subject`
  FOREIGN KEY (`ClassID` )
  REFERENCES `class` (`ClassID` )ON UPDATE CASCADE,
  FOREIGN KEY (`SubjectID` )
  REFERENCES `subject` (`SubjectID` )ON UPDATE CASCADE)

ENGINE = InnoDB
AUTO_INCREMENT = 15
DEFAULT CHARACTER SET = utf8;


INSERT INTO `class_subject`(`ClassID`, `SubjectID`) VALUES ('1','1'), ('1','2'), ('1','3'), ('12','4'), ('12','5'), ('12','6');

加入查询:

$ClassID = "1";
$sql =  "SELECT subject.SubjectID, subject.Subject FROM subject " .
        "LEFT JOIN class_subject" .
        "ON subject.SubjectID = class_subject.SubjectID " .
        "WHERE class_subject.ClassID = $ClassID " .
        "ORDER BY SubjectID ASC";

尽管相同的查询在 phpMyAdmin 中运行良好。

最佳答案

你需要在这个字符串的末尾有一个空格:

"LEFT JOIN class_subject " .

如果你完成了 echo $sql 你会看到它说:

LEFT JOIN class_subjectON

像这样的错误就是为什么我不建议你这样写字符串。只需在其中写入带有换行符的字符串:

$sql =  "SELECT subject.SubjectID, subject.Subject FROM subject
         LEFT JOIN class_subject
         ON subject.SubjectID = class_subject.SubjectID
         WHERE class_subject.ClassID = $ClassID
         ORDER BY SubjectID ASC";

PHP 允许在字符串文字中换行,SQL 也是如此,因此不需要连接。

关于php - 即使在 PHP 中多次尝试后,MySQL 连接仍无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24196649/

相关文章:

mysql - 选择多边形 mysql 内的点 - 没有错误,没有结果 -(出了什么问题?)

php - 使用 PHP Echos 和 mySQL 计数查询等

PHP数据库连接实践

mysql - 如何将 AWS EC2 上设置的 Airflow 正确连接到 RDS?

mysql - 连接子查询中的外部选择列值?

mysql - Sequelize Upsert 是创建而不是更新

php - Laravel:使用 Faker 播种多个独特的列

php - 为什么php中的某些DateTime对象需要@符号

php - 如何使用 PHP 连接到在线 MySQL 数据库?

PHP 请求 : worker fails with "MySQL server has gone away"