MySQL Query中的错误:“您的SQL语法中有错误; ...”

时间:2013-07-14 18:07:12

标签: php mysql

我正在为我的移动应用程序编写API。当我在使用logout方法时,我看到了奇怪的MySQL错误:

“您的SQL语法中有错误;请查看与您的MySQL服务器版本对应的手册,以便在第1行使用”1“附近的正确语法”

API请求: thapi.php?q = logout& user = 1& session = aaa

我尝试在SELECT语句中添加,但它没有解决我的问题。

这是我的代码:

 mysql_connect(DB_HOST, DB_USERNAME, DB_PASSWORD);
 mysql_select_db(DB_BASE);
 $q = "SELECT * FROM `system_sesje` WHERE `sesjaid` = \"" + $_GET['session'] + "\" AND `user` = " + $_GET['user'];
 $a = mysql_query($q);
 echo mysql_error();
if(mysql_num_rows($a) == 0)
 {
  $returning = array('error' => 'Invalid session id');
  echo json_encode($returning);
  break;
 }

我的表结构:

HERE

5 个答案:

答案 0 :(得分:2)

解决方案如下:

$dsn = "mysql:host=" . DB_HOST . ";dbname=" . DB_BASE;
$opt = array(
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
    )
$conn = new PDO( $dsn, DB_USERNAME, DB_PASSWORD, $opt );
$stmt = $conn->prepare("SELECT * FROM `system_sesje` WHERE `sesjaid` = ? AND `user` = ?");
$stmt->bindParam( 1, $_GET['session'], PDO::PARAM_STR );
$stmt->bindParam( 2, $_GET['user'], PDO::PARAM_INT );
$stmt->execute();
if( $stmt->rowCount() == 0 ) {
    $returning = array('error' => 'Invalid session id');
    echo json_encode($returning);
    break;
}

答案 1 :(得分:1)

快速修复您的查询:

$sql = "SELECT *
        FROM `system_sesje`
        WHERE `sesjaid` = '{$_GET['session']}'
            AND `user` = '{$_GET['user']}'";

为了您的安全,您必须转义所有输入值。

答案 2 :(得分:0)

尝试更改

"SELECT * FROM `system_sesje` WHERE `sesjaid` = \"" + $_GET['session'] + "\" AND `user` = " + $_GET['user'];"

'SELECT * FROM `system_sesje` WHERE `sesjaid` = \"' . $_GET['session'] . '\" AND `user` = "' . $_GET['user'] . '"'; 

看看会发生什么

答案 3 :(得分:0)

根据您的评论,我解决了这个问题。

我改变了:

$q = "SELECT * FROM `system_sesje` WHERE `sesjaid` = \"" + $_GET['session'] + "\" AND `user` = " + $_GET['user'];

到:

 $q = "SELECT * FROM `system_sesje` WHERE `sesjaid` = \"".$y."\" AND `user` = ".$z;

现在一切正常。我还添加了针对SQL注入的保护:

$y = str_replace(' ', '', $_GET['session']);
$z = str_replace(' ', '', $_GET['user']);

非常感谢!

答案 4 :(得分:-1)

您可以尝试这样编写查询:

$sql = "SELECT * FROM system_sesje ";

$sql.= "WHERE sesjaid = '".$_GET['session']."' ";

$sql.= "AND user = '".$_GET['user']."'";

我这样写查询,以便其他人可以更轻松地获取它们。注意每行末尾的空格。