【问题标题】:Php SQL syntax errorphp SQL语法错误
【发布时间】:2011-04-19 00:11:59
【问题描述】:

我尝试了几种方式来解决这个问题,但错误消息几乎保持不变:

15检索分数时出错 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“table WHERE id>15 1 ORDER BY id ASC LIMIT 0,100”附近使用正确的语法

我打的电话是

http://myserver.com/get_dbupdates2.php?theid=15

    $type   = isset($_GET['type']) ? $_GET['type'] : "global";
$offset = isset($_GET['offset']) ? $_GET['offset'] : "0";
$count  = isset($_GET['count']) ? $_GET['count'] : "100";
$sort   = isset($_GET['sort']) ? $_GET['sort'] : "id ASC";

// Localize the GET variables
$udid  = isset($_GET['udid']) ? $_GET['udid'] : "";
$name  = isset($_GET['name']) ? $_GET['name']  : "";
$clubname  = isset($_GET['clubname']) ? $_GET['clubname']  : "";
$theid  = isset($_GET['theid']) ? $_GET['theid']  : ""; 


// Protect against sql injections
$type   = mysql_real_escape_string($type);
$offset = mysql_real_escape_string($offset);
$count  = mysql_real_escape_string($count);
$sort   = mysql_real_escape_string($sort);
$udid   = mysql_real_escape_string($udid);
$name   = mysql_real_escape_string($name);
$clubname   = mysql_real_escape_string($clubname);
$theid   = mysql_real_escape_string($theid);

    echo $theid;

// Build the sql query
//$sql = "SELECT * FROM $table WHERE ";
$sql = "SELECT * FROM $table WHERE id>$theid ";

switch($type) {
    case "global":
        $sql .= "1 ";
        break;
    case "device":
        $sql .= "udid = '$udid' ";
        break;
    case "name":
        $sql .= "name = '$name' ";
        break;
    case "clubname":
        $sql .= "clubname = '$clubname' ";
        break;
    case "theid":
        $sql .= "theid = '$theid' ";
        break;
}

$sql .= "ORDER BY $sort ";
$sql .= "LIMIT $offset,$count ";

$result = mysql_query($sql,$conn);

谁能看出我哪里出错了?

最诚挚的问候, -代码

编辑

看到这两行

//$sql = "SELECT * FROM $table WHERE ";
$sql = "SELECT * FROM $table WHERE id>$theid ";

如果我注释掉最后一行,取消注释第一行,脚本运行正常并返回数据。但是保持原样会产生错误。

所以这让我相信问题与此有关

id>$theid ";  

问候 -代码

【问题讨论】:

  • 你想通过在“全局”案例中附加 "1 " 来达到什么目的?
  • 您的编辑更改返回错误?

标签: php sql syntax


【解决方案1】:

命名表'table'必须这样引用

SELECT * FROM `table`

并且您必须在条件之间定义 AND 或 OR,例如$sql .= "AND clubname = '$clubname' ";

【讨论】:

  • 表格实际上不必像这样被引用,可以从表格中选择 *
  • @wired00 如果表名为 table(或 mysql 中的任何其他保留字),则需要引用它。
  • 在我的测试服务器上没有返回错误:/也许是配置。 @Code 在哪里定义 $table ?
  • @bumperbox 但他将其定义为 $table。我假设 $table is not = "table" 但我想我不应该假设。编辑:其实我只是注意到“表 WHERE”对不起你是对的 Bil_fr。 @Code 您需要按照 Bil_fr 状态进行更改。您不能使用“table”作为表名,因为它是保留字
  • 在我的回答中,您必须在您的条件之间添加ANDOR 就可以了。切换为type == 'name' 后,$sql 将类似于SELECT * FROM nameOfYourTable WHERE id>idValue AND name = aNameValue
猜你喜欢
  • 2018-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-23
  • 2014-08-22
  • 1970-01-01
相关资源
最近更新 更多