该query函数采用有效的SQL字符串,并直接针对数据库连接执行它$conn
面向对象的风格
$result = $conn->query("SELECT * FROM `people`");
程序风格
$result = mysqli_query($conn, "SELECT * FROM `people`");
警告
这里的一个普遍问题是,人们只会执行查询并期望它能够工作(即返回mysqli_stmt对象)。由于此函数仅使用字符串,因此您首先要自己构建查询。如果SQL根本没有任何错误,则MySQL编译器将失败,此时此函数将返回false。
$result = $conn->query('SELECT * FROM non_existent_table'); // 此查询将失败 $row = $result->fetch_assoc();
上面的代码将产生E_FATAL错误,因为$result是false,而不是对象。
PHP致命错误:fetch_assoc()在非对象上调用成员函数
程序错误是相似的,但不是致命的,因为我们只是违反了函数的期望。
$row = mysqli_fetch_assoc($result); // 与上一个查询相同
您将从PHP获得以下消息
mysqli_fetch_array() 期望参数1为mysqli_result,给定布尔值
您可以通过先进行测试来避免这种情况
if($result) $row = mysqli_fetch_assoc($result);