例如,假设我的查询是这样的:
$query = "SELECT * FROM statements WHERE user_id_created_by=$users_id";
$user_id是否需要加引号取决于数据库中的类别是varchar还是int?
另外,我不太明白间距是否会影响查询:
这个是不是和上面那个一样:
$query = "SELECT * FROM statements WHERE user_id_created_by = $users_id";
最佳答案
您根本不应该在查询中使用变量。使用准备好的语句来防止 sql 注入(inject),这可能允许攻击者窃取/修改/删除他们想要的任何东西。
PDO 准备语句(带命名参数):
$params = [
':id' => $users_id
]
$query = "SELECT * FROM statements WHERE user_id_created_by=:id";
$sth = $dbh->prepare($query);
$sth->execute(array($params);
mysqli 预处理语句:
$stmt = mysqli_prepare($link, "SELECT * FROM statements WHERE user_id_created_by=?")
mysqli_stmt_bind_param($stmt, "s", $users_id);
mysqli_stmt_execute($stmt);
关于查询中的空格,这些应该不会有任何影响。
关于php - 变量是否需要引用取决于数据库中的类别是否标记为varchar或int?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20818750/