我有一些别人写的代码。这段代码给我一个语法错误,我无法弄清楚为什么。
if (!isset($_POST['new'])) {$query.= 'WHERE `name` ="'.mysqli_real_escape_string($origName).'"';}
$query .= ';';
query($query);
$output = "Changes saved";
具体错误是:
您的SQL语法有错误;查看与您的MySQL服务器版本相对应的手册,以获得正确的语法,以便在' WHERE
name
=""''在第1行
我希望有人能向我指出这一点。
感谢您的建议,但仍然得到相同的基本错误。以下是处理添加新人的代码块:
if (isset($_POST['name'])) { // Save new/updated presenter
$newName = mysqli_real_escape_string(htmlentities($_POST['name'],ENT_QUOTES));
$origName = mysqli_real_escape_string(htmlentities($_POST['origName'],ENT_QUOTES));
if (isset($_POST['new'])) {
$query = "INSERT INTO `presenters` SET `name`='$newName'";
} else {
$query = "UPDATE `presenters` SET `name`='$newName'";
}
unset($_POST['new'], $_POST['name'], $_POST['origName']);
foreach ($_POST as $key=>$value) {
$key = mysql_real_escape_string($key);
$value = mysql_real_escape_string($value);
$query .= ", `$key`='$value'";
}
if (!isset($_POST['new'])) {
$query.= "WHERE `name` ='" . mysqli_real_escape_string($db, $origName) . "'";
}
$query .= ';';
query($query);
$output = "Changes saved";
答案 0 :(得分:0)
可能只需要在WHERE
if (!isset($_POST['new'])) {$query.= ' WHERE `name` ="'.mysqli_real_escape_string($origName).'"';}
也可以是双引号,我相信MySQL在字符串周围使用单引号。
if (!isset($_POST['new'])) {$query.= " WHERE `name` ='".mysqli_real_escape_string($origName)."'";}
答案 1 :(得分:0)
清洁格式有助于清理这样的东西:
if (!isset($_POST['new'])) {
$query.= "WHERE `name` = '" . mysqli_real_escape_string($origName) . "'";
}
$query .= ';';
query($query);
$output = "Changes saved";
首先,示例中WHERE
的格式设置已关闭。我将其设置为整个查询的双引号&来自mysqli_real_escape_string($origName)
的查询中的值的单引号。
但是说,mysqli_real_escape_string()
格式不正确。对于过程样式,您需要将实际的DN连接(aka:link)设置为第一个参数:
string mysqli_real_escape_string ( mysqli $link , string $escapestr )
因此,您的示例中显示的mysqli_real_escape_string()
需要更改为以下内容:
mysqli_real_escape_string($db, $origName)
$db
实际上是更大代码结构中真正的MySQL数据库连接链接。
答案 2 :(得分:0)
虽然前两个mysqli_real_escape_string()
也需要2个参数。第一个应该是你的db-link,第二个应该是需要转义的字符串。
可以在htmlentities()
mysqli_real_escape_string()
的使用