我遇到了一些我不明白的问题,并尝试从 php 文件创建表,所以我创建了一个变量并在其中添加了所有 create 语句,以便我可以对它运行mysql_query,我不断收到语法问题的错误,所以我回显变量的内容并将其粘贴到 phpmyadmin 的 sql 部分中,它文字很好,但是如果我从 PHP 尝试它,它会给我一个错误,因为:
创建表时出错:
您的 SQL 语法有误;请查看手册 对应于您的MySQL服务器版本,以便使用正确的语法 在"如果不存在则创建表"附近
Materials
(Id
INT(11) 不为空 AUTO_INCREMENT",在第9行
这是我对其运行查询的变量中的字符串:
// Create Tables Variable
$Tables = "";
// Create Students Table
$Tables = $Tables . "CREATE TABLE IF NOT EXISTS `Students` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`FirstName` varchar(50) DEFAULT NULL,
`LastName` varchar(50) DEFAULT NULL,
`Age` int(3) DEFAULT NULL,
`Major` varchar(50) DEFAULT NULL,
`Image` varchar(100) DEFAULT NULL,
PRIMARY KEY (`Id`)
);";
// Create Materials Table
$Tables = $Tables . "CREATE TABLE IF NOT EXISTS `Materials` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`Name` varchar(50) DEFAULT NULL,
`LastName` varchar(50) DEFAULT NULL,
PRIMARY KEY (`Id`)
);";
// Create Materials Students intersectons table for many to many relation
$Tables = $Tables . "CREATE TABLE `Material_Student`(
`Student_Id` INT NOT NULL,
`Material_id` INT NOT NULL,
FOREIGN KEY (`Student_Id`) REFERENCES Students(`id`) ON UPDATE CASCADE,
FOREIGN KEY (`Material_id`) REFERENCES Materials(`id`) ON UPDATE CASCADE
);";
// Create Pages Table
$Tables = $Tables . "CREATE TABLE `Pages`(
`Id` INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY(`Id`),
`Name` varchar(50),
`Conent` varchar(5000)
);";
// Create News Table
$Tables = $Tables . "CREATE TABLE `News`(
`Id` INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY(`Id`),
`Title` varchar(50),
`Conent` varchar(5000),
`Image` varchar(100)
);";
// Create Notifications Table
$Tables = $Tables . "CREATE TABLE `Notifications`(
`Id` INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY(`Id`),
`Title` varchar(50),
`Conent` varchar(5000),
`Student_Id` INT NOT NULL,
FOREIGN KEY (`Student_Id`) REFERENCES Students(`id`) ON UPDATE CASCADE
);";
那么我在这里错过了什么?
通常,
您不能执行许多查询,我建议像执行不同的查询一样执行所有查询,但是MySQLi
可以选择一次执行多个查询,您可以在此处找到文档和示例。
您的问题似乎是将多查询传递到 PHP 的单查询函数中。
有关说明,请参阅此链接。http://php.net/manual/en/mysqli.quickstart.multiple-statement.php
我建议你要么分解你的语句,一次执行一个,要么请改用multi_query函数。
http://www.php.net/manual/en/mysqli.multi-query.php
$mysqli = new mysqli("localhost", "yourusername", "yourpassword", "test");
if ($mysqli->connect_errno) {
echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}
if (!$mysqli->multi_query($Tables)) {
echo "Multi query failed: (" . $mysqli->errno . ") " . $mysqli->error;
}
...
呵呵