Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 查询语法问题_Php_Mysql_Syntax - Fatal编程技术网

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行“WHERE
name
=”附近要使用的正确语法

我希望这里有人能向我指出显而易见的事实

谢谢你的建议,但仍然得到相同的基本错误。下面是处理添加新人的代码块:

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年发布。