我有一个非错误的mysql代码(它正在工作并将正确的数据输入每个字段)
$sql = "UPDATE bloggers SET img_name = '" . $img_name . "', name = '" . $blogger_name . "', blog_url = '" . $blog_url . "', google_plus = '" . $google_plus . "' WHERE blogger_id = '" . $blogger_id . "'";
$res = mysql_query($sql);
if($res)
{return 99;}
else
{return 0;}
其中$ res将返回99。
然而,它给了我这个错误。
查询无效:您的SQL语法出错;检查与MySQL服务器版本对应的手册,以便在第1行的“1”附近使用正确的语法
我该如何解决这个问题?
让我知道!谢谢!
此致
答案 0 :(得分:1)
我认为您的参数中有一个特殊字符。所以在mysql_real_escape_string
之前对你的参数进行消毒。它也会阻止sql注入攻击。
$img_name = mysql_real_escape_string($img_name);
$blogger_name = mysql_real_escape_string($blogger_name);
$blog_url = mysql_real_escape_string($blog_url);
$google_plus = mysql_real_escape_string($google_plus);
答案 1 :(得分:1)
很好地回答你的问题,你在自己的代码上执行SQL Injection
,因为你的变量包含单引号或斜杠。
你需要使用mysql_real_escape_string
来逃避它们但是我不会这样做,因为不推荐使用mysql_ *函数。
使用 PDO 预备语句或 MySQLi ,而 i 代表改进。
使用PDO可以很简单:
$stmt = $pdoInstance->prepare("
UPDATE bloggers
SET img_name = :imgname, name = :blogname,
blog_url = :blogurl, google_plus = :googleplus
WHERE blogger_id = :blogid
");
//bind parameters
$stmt->bindParam(':imgname', $img_name, PDO::PARAM_STR);
$stmt->bindParam(':blogname', $blogger_name, PDO::PARAM_STR);
$stmt->bindParam(':blogurl', $blog_url, PDO::PARAM_STR);
$stmt->bindParam(':googleplus', $google_plus, PDO::PARAM_STR);
$stmt->bindParam(':blogid', $bloger_id, PDO::PARAM_INT);
if ($stmt->execute()) {
//success
}