在PHP中执行sql查询时出错

在PHP中执行sql查询时出错,php,mysql,mysqli,Php,Mysql,Mysqli,我正在努力学习在php中使用mysql。我开始尝试在mysql中创建一个表,并使用mysqli扩展 我的代码: <?php $truemsg = "Table created successfully"; $falsemsg = "Error creating table: "; $servername = "localhost"; $username = "myuser"; $password = "mypass"; $db = "mytable"; // Create datab

我正在努力学习在php中使用mysql。我开始尝试在mysql中创建一个表,并使用mysqli扩展

我的代码:

<?php
$truemsg = "Table created successfully";
$falsemsg = "Error creating table: ";

$servername = "localhost";
$username = "myuser";
$password = "mypass";
$db = "mytable";


// Create database
$sql = "USE ".$db.";".
'CREATE TABLE IF NOT EXISTS Authentication (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
userid VARCHAR(30) NOT NULL,
password VARCHAR(30) NOT NULL,
role VARCHAR(20) NOT NULL,
email VARCHAR(50)
);';

print "Sql command is ".$sql;

// Create connection
$conn = new mysqli($servername, $username, $password);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 
print "<p></p>";
if ($conn->query($sql) === TRUE) {
    echo $truemsg;
} else {
    echo $falsemsg . $conn->error;
}

$conn->close();
?>

我尝试在mysql命令行上粘贴相同的命令,效果很好。在php中使用它有什么问题?

您应该逐个运行查询

$sql = "query one";
$conn->query($sql);

$sql = 'query two';
$conn->query($sql);
而不是将它们耦合到一个语句中

也不要使用
mysqi\u multi\u query()
,此异步函数不适用于日常使用

此外,在这种特殊情况下,
使用
查询是多余的。数据库应进入构造函数:

$conn = new mysqli($servername, $username, $password, $db);
                                                       ^^^ here
另外,告诉mysqli自动抛出错误,而不是手动检查每个数据库命令的结果:

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
这样,您将获得整洁的代码:

<?php
$servername = "localhost";
$username = "myuser";
$password = "mypass";
$db = "mytable";

// Create data table
$sql = 'CREATE TABLE IF NOT EXISTS Authentication (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
userid VARCHAR(30) NOT NULL,
password VARCHAR(30) NOT NULL,
role VARCHAR(20) NOT NULL,
email VARCHAR(50)
)';

// Create connection
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$conn = new mysqli($servername, $username, $password, $db);

// Run a query
$conn->query($sql);
echo "Table created successfully";

这似乎是一个mysql多查询问题

$conn->select_db($db);
可以在查询之前使用此函数使用数据库,并从查询字符串中删除use database语句,然后查询字符串变为

$sql = 'CREATE TABLE IF NOT EXISTS Authentication (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
userid VARCHAR(30) NOT NULL,
password VARCHAR(30) NOT NULL,
role VARCHAR(20) NOT NULL,
email VARCHAR(50)
)';

这可能对您有用。

使用mysqli_multi_query进行多个查询,或者删除USe db并将其置于连接中
$sql = 'CREATE TABLE IF NOT EXISTS Authentication (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
userid VARCHAR(30) NOT NULL,
password VARCHAR(30) NOT NULL,
role VARCHAR(20) NOT NULL,
email VARCHAR(50)
)';