PHP执行SQL需先连接数据库(mysqli或PDO),再查询;直接写SQL会报错;mysqli须先connect再query;PDO必须用prepare+execute防注入;WHERE条件引号与类型要明确;查询后必须检查结果。
PHP 本身不直接执行 SQL 查询,必须通过数据库扩展(如 mysqli 或 PDO)连接并发送语句;裸写 SELECT * FROM users 是无效的,会报错或被当成字符串。
用 mysqli_query() 执行查询必须先建立连接
常见错误是跳过连接步骤,直接调用 mysqli_query(),结果返回 Warning: mysqli_query(): Couldn't fetch mysqli 或 null。
正确流程是:
- 先用
mysqli_connect()创建连接资源(推荐面向对象写法:new mysqli($host, $user, $pass, $db)) - 检查连接是否成功(
$mysqli->connect_error不为空则失败) - 再用
$mysqli->query($sql)发送查询 - 对
SELECT类查询,需用fetch_assoc()、fetch_all()等读取结果集
示例:
立即学习“PHP免费学习笔记(深入)”;
$mysqli = new mysqli('localhost', 'root', '', 'test');
if ($mysqli->connect_error) die('连接失败: ' . $mysqli->connect_error);
$result = $mysqli->query("SELECT id, name FROM users WHERE status = 1");
while ($row = $result->fetch_assoc()) {
echo $row['id'] . ': ' . $row['name'] . "\n";
}
PDO 查询更安全,但 prepare() 不是可选而是必需
很多人以为 PDO::query() 和 mysqli_query() 一样能直插变量,结果写出严重 SQL 注入漏洞。例如:$pdo->query("SELECT * FROM users WHERE id = $id") —— 这属于高危写法。
正确做法是: