mysqli_query()执行无条件查询返回的是mysqli_result对象而非数组,必须用mysqli_fetch_assoc()等函数提取数据;PDO中可用query()直接查询,无需prepare(),再用fetch()获取结果。
直接用 mysqli_query() 发送 SELECT * FROM 表名 就能拿到结果集,但必须配合 mysqli_fetch_assoc() 或类似函数才能转成 PHP 数组。不处理返回值的话,你看到的只是个资源(resource)或对象,不是数据。
mysqli_query() 返回的是结果集(mysqli_result 对象),不是数组mysqli_fetch_assoc()、mysqli_fetch_array() 或循环配合才能取出行数据WHERE 就是无条件,但别漏了分号和引号——常见错误是写成 "SELECT * FROM users" 却忘了前面的连接句柄mysql_connect('localhost', 'root', '123');
mysqli_select_db($conn, 'test');
$result = mysqli_query($conn, "SELECT * FROM users");
while ($row = mysqli_fetch_assoc($result)) {
echo $row['name'] . "\n";
}无条件查询不需要参数绑定,用 PDO::query() 比 prepare() + execute() 更轻量。很多人一上来就套 prepare,反而多写两行还容易忘记调 execute()。
query() 直接返回 PDOStatement,可直接 fetch() 或 fetchAll()
prepare(),必须调 execute(),否则查不到数据PDO::FETCH_BOTH,推荐显式设为 PDO::FETCH_ASSOC 避免下标混淆$pdo = new PDO("mysql:host=localhost;dbname=test", "root", "123");
$stmt = $pdo->query("SELECT * FROM users");
$stmt->setFetchMode(PDO::FETCH_ASSOC);
while ($row = $stmt->fetch()) {
echo $row['id'] . ': ' . $row['email'] . "\n";
}执行完查询却得不到数据,90% 不是 SQL 写错,而是连接、选择库或结果读取环节断在中间。
mysqli_connect() 或 PDO 构造是否成功,失败时要 var_dump($conn) 看是不是 false 或抛异常mysqli_select_db() 返回 true 才算生效mysqli_num_rows($result) 或 $stmt->rowCount() 先看有没有记录,再决定进不进 while 循环mysql_connect()、mysql_query() 在 PHP 7.0+ 已被彻底移除,不是“不推荐”,是运行就报 Fatal error: Uncaught Error: Call to undefined function mysql_connect()。现在只有两条路:mysqli 或 PDO。
立即学习“PHP免费学习笔记(深入)”;
实际写的时候,先连上、再查、再取,三步缺一不可。最容易卡住的是以为 mysqli_query() 返回的就是数组——它只是个句柄,得靠 fetch 系列函数“掰开”才行。