这是最好的方法吗?
我应该对每个查询中的每个值执行此操作吗?GET和POST?
是否有addslashes(mysql_real_escape_string())过度杀伤?
如果你正在使用mysql_query()那么是的,mysql_real_escape_string()是最好的方法.是的,您必须将它应用于您混合到sql语句中的每个参数.例如
$query = "
SELECT
x,y,z
FROM
foo
WHERE
a = '". mysql_real_escape_string($_POST['a'], $mysql) . "'
AND b = '". mysql_real_escape_string($_POST['b'], $mysql) . "'
";
Run Code Online (Sandbox Code Playgroud)
但您也可以使用预处理语句,例如使用pdo模块.参数将从sql语句中传输,因此不需要转义.它更安全(因为你不能忘记转义或错误/错误的字符集),通常比将参数混合到语句中更快,甚至更简单.例如
$pdo = new PDO('mysql:host=localhost;dbname=test', '..', '..');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $pdo->prepare("
INSERT INTO
foo (x,y,z)
VALUES
(:x,:y,:z)
");
$stmt->bindParam(':x', $x);
$stmt->bindParam(':y', $y);
$stmt->bindParam(':z', $z);
// insert all records (0,0,0) ... (0,1,0) ... (9,9,9)
for($x=0; $x<10; $x++) {
for($y=0; $y<10; $y++) {
for($z=0; $z<10; $z++) {
$stmt->execute();
}
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:和addslashes(mysql_real_escape_string())不仅是矫枉过正,而且也是错误的.
| 归档时间: |
|
| 查看次数: |
464 次 |
| 最近记录: |