如果您根本不想担心 SQL 注入,请使用准备好的语句。
在 PHP 中使用 mysqli API 和准备好的语句,您的代码可能类似于以下示例。请注意,我使用的是程序样式。面向对象的样式也可用。
<?php
$link = mysqli_connect("localhost", "user", "password", "dbname");
/* check connection */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
// taken from your example
$id = trim(strip_tags(strtoupper($_GET['id'])));
if(!is_numeric($id)) {
die('BAD id');
}
/* create a prepared statement */
if ($stmt = mysqli_prepare($link, "SELECT * FROM games WHERE ID =?")) {
/* bind parameters for markers */
mysqli_stmt_bind_param($stmt, "s", $id);
/* execute query */
$result = mysqli_stmt_execute($stmt);
/* bind result variables */
mysqli_stmt_bind_result($stmt, $col1, $col2, ...);
/* fetch values */
while (mysqli_stmt_fetch($stmt)) {
printf("%s %s\n", $col1, $col2, ...);
}
/* close statement */
mysqli_stmt_close($stmt);
}
/* close connection */
mysqli_close($link);
准备好的语句将$id
示例中的查询数据与 SQL 语法分开。所以数据不能被解析为 SQL 语法。这是首选方式。
如果你想在 PHP 和 MySQL 中使用准备好的语句,你必须使用 mysqli api 或 PDO_MySQL api。无论如何,您都应该更改为其中之一,因为 PHP 的“旧的”mysql api 已被弃用并且不再开发。