即使经过PHP的多次尝试,MySQL连接也无法正常工作

use*_*125 0 php mysql

我确信我可能会犯小错误,但我无法发现错误.我无法理解为什么我无法在MySQL中使用连接查询.

我在DB中有三个关系表:

  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');
Run Code Online (Sandbox Code Playgroud)

和...

    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');
Run Code Online (Sandbox Code Playgroud)

加入查询:

$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";
Run Code Online (Sandbox Code Playgroud)

虽然相同的查询在phpMyAdmin中工作正常.

Bar*_*mar 7

您需要在此字符串末尾添加一个空格:

"LEFT JOIN class_subject " .
Run Code Online (Sandbox Code Playgroud)

如果你做了,echo $sql你会看到它说:

LEFT JOIN class_subjectON
Run Code Online (Sandbox Code Playgroud)

像这样的错误是我不建议你写这样的字符串的原因.只需在其中写入带换行符的字符串:

$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";
Run Code Online (Sandbox Code Playgroud)

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