Php 查询语法问题
我有一些别人写的代码。这段代码给了我一个语法错误,我不知道为什么Php 查询语法问题,php,mysql,syntax,Php,Mysql,Syntax,我有一些别人写的代码。这段代码给了我一个语法错误,我不知道为什么 if (!isset($_POST['new'])) {$query.= 'WHERE `name` ="'.mysqli_real_escape_string($origName).'"';} $query .= ';'; query($query); $output = "Changes saved"; 具体错误是: 您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以了解第1行“WHEREname=”附近要使用的
if (!isset($_POST['new'])) {$query.= 'WHERE `name` ="'.mysqli_real_escape_string($origName).'"';}
$query .= ';';
query($query);
$output = "Changes saved";
具体错误是:
您的SQL语法有错误;检查与MySQL服务器版本对应的手册,以了解第1行“WHEREname
=”附近要使用的正确语法
我希望这里有人能向我指出显而易见的事实
谢谢你的建议,但仍然得到相同的基本错误。下面是处理添加新人的代码块:
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";
可能只需要在
的前面添加一个空格,其中
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)."'";}
清理格式有助于清理以下内容:
if (!isset($_POST['new'])) {
$query.= "WHERE `name` = '" . mysqli_real_escape_string($origName) . "'";
}
$query .= ';';
query($query);
$output = "Changes saved";
首先,示例中
的格式设置为关闭。我将整个查询设置为双引号&来自mysqli\u real\u escape\u string($origName)
的查询中的值设置为单引号
但也就是说,格式是不正确的。对于程序样式,需要将实际DN连接(aka:link)设置为第一个参数:
string mysqli_real_escape_string ( mysqli $link , string $escapestr )
因此,需要将示例中显示的mysqli\u real\u escape\u string()
更改为如下内容:
mysqli_real_escape_string($db, $origName)
在较大的代码结构中,$db
实际上是真正的MySQL数据库连接链接。尽管前两个mysqli\u real\u escape\u string()
s也需要两个参数。第一个应该是数据库链接,第二个应该是需要转义的字符串
可以在mysqli\u real\u escape\u string()中删除htmlentities()
您可以添加生成的查询吗?我假设WHERE
前面没有空格。使用mysqli
时,应该使用参数化查询,并将用户数据添加到查询中。不要使用字符串连接来完成此操作,因为您将创建严重的。mysqli\u real\u escape\u string()
需要两个参数。是否共享生成的完整SQL代码?或者您试图运行以WHERE
开头的SQL?从PHP文档中:“string mysqli\u real\u escape\u string(mysqli$link,string$escapestr)”您缺少mysqli$link
参数……奇怪的是,我的5.1.73版(刚刚测试过)只使用单引号。双引号使它认为这是您可能已启用的变量/列名。通常情况并非如此。此外,如果您仍在使用5.1,您将错过一些巨大的性能改进。编辑:我的糟糕,在我的configCentOS 6.5中添加了一个部署脚本,该脚本仅与MySQL 5.1一起提供:这已经过时了。MySQL 5.5于2009年发布,MySQL 5.6是目前稳定的版本,于2011年发布。