【问题标题】:Invalid query: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax无效查询:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册以获取正确的语法
【发布时间】:2015-09-12 07:49:07
【问题描述】:

当这个脚本运行时:

<?php
      $username = "root";
      $host = "localhost";
      $pass = "mypass";
      $db = "api";
      $key = $_GET['key'];
      mysql_connect("$host", "$username", "$pass")or die("cannot connect"); 
      mysql_select_db("$db")or die("cannot select DB");
      $key = stripslashes($key);
      $key = mysql_real_escape_string($key);
      $result = mysql_query("SELECT * FROM keys WHERE key='. $key .'");
      if (!$result) { // add this check.
         die('Invalid query: ' . mysql_error());
      }else{
         echo "done";
      }
?>

它显示了错误:

无效查询:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取在“keys WHERE key=”附近使用的正确语法。 aL6MP .'' 在第 1 行

【问题讨论】:

  • SELECT * FROM keys WHERE key='$key'
  • 到目前为止,任何答案对您有帮助吗?
  • keyskey 均保留

标签: php mysql


【解决方案1】:

你的sql单引号和双引号不匹配。

$result = mysql_query("SELECT * FROM keys WHERE key='". $key ."'; ");

【讨论】:

    【解决方案2】:

    你错过了一些报价。将您的查询更改为此

    $result = mysql_query("SELECT * FROM keys WHERE key='".$key ."'");
    

    或者不要使用连接,因此你使用双引号

    $result = mysql_query("SELECT * FROM keys WHERE key='$key'");
    

    【讨论】:

      【解决方案3】:

      更改以下行:

      mysql_connect("$host", "$username", "$pass")or die("cannot connect"); 
      mysql_select_db("$db")or die("cannot select DB");
      $result = mysql_query("SELECT * FROM keys WHERE key='. $key .'");
      

      收件人:

      // No need to quote variables
      mysql_connect($host, $username, $pass) or die("cannot connect");
      // No need to quote variable 
      mysql_select_db($db) or die("cannot select DB");
      // No need to concatonate variable, add "``" backticks around table and column names to prevent SQL reserved word error.
      $result = mysql_query("SELECT * FROM `keys` WHERE `key` = '$key'");  
      

      另请注意,mysql_* 已弃用,将与 mysqli_*PDO 一起删除

      【讨论】:

        【解决方案4】:

        我建议你改用mysqli

        你做错了什么

        $result = mysql_query("SELECT * FROM keys WHERE key='. $key .'");
        

        您没有正确打开和关闭 quotesconcatenation(dots)。 因此,您可以执行以下任一操作。

        $result = mysql_query("SELECT * FROM keys WHERE key='$key'");
        

        $result = mysql_query("SELECT * FROM keys WHERE key='". $key ."'");
        

        这完全取决于你,两者都会产生相同的结果。

        【讨论】:

          【解决方案5】:

          在连接中传递变量时不应使用双引号:

            mysql_connect($host, $username, $pass) or die ("Could not connect to Server");
          

          删除'$key' 之间的空格,您也不必连接。

          $result = mysql_query("SELECT * FROM keys WHERE key='$key'");
          

          或者让它变得更简单:

          $que = "SELECT * FROM keys WHERE key='$key'";
          $result = mysql_query($que);
          

          从废弃的 mysql_* 函数转换为 mysqli 或 PDO。

          【讨论】:

            【解决方案6】:

            $result = mysql_query("SELECT * FROM keys WHERE key='. $key .'"); 替换为$result = mysql_query("SELECT * FROM keys WHERE key='$key");

            $result = mysql_query("SELECT * FROM keys WHERE key='. $key .'"); 替换为$result = mysql_query("SELECT * FROM keys WHERE key='". $key ."'");

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2019-03-25
              • 2015-10-23
              • 1970-01-01
              • 2017-06-01
              • 2020-02-22
              相关资源
              最近更新 更多