在SQL命令中使用包含刻度/引号的字符串

时间:2013-04-15 00:11:19

标签: php mysql

我正在使用

$shouldfollow = "'".htmlspecialchars($_GET["shouldfollow"])."',";
echo $shouldfollow;

以实现类似于'apple',的字符串。它到目前为止100% 。棘手的部分是尝试在MySQL命令中使用该变量。这是我尝试过的。

mysqli_query($con,"UPDATE users SET following=".$shouldfollow." WHERE username='$username'");

但它反而说我的语法错了。我知道命令将按照我想要的方式工作(即如果我删除'',部分)。

如果我不够容易混淆,上面的图片就是我在运行命令后的最终结果。

1 个答案:

答案 0 :(得分:2)

你不应该使用htmlspecialchars这对sql没有意义,但仅限于HTML,但是mysqli::real_escape_string

或者,甚至更好,prepared statements

逗号怎么样 - 你必须立即逃避每个变量:

$shouldfollow = mysqli_real_escape_string($_GET["shouldfollow"]);

或准备好的陈述:

$stmt = mysqli_prepare($db, 'UPDATE users SET following = ? WHERE username = ?');
mysqli_stmt_bind_param($stmt, 'ss', $_GET["shouldfollow"], $username);
mysqli_stmt_execute($stmt);

注意:您还需要检查$_GET["shouldfollow"]是否另外存在,但这个问题超出了这个范围。