0

我目前正在为我的移动应用程序编写 API。当我使用注销方法时,我看到了奇怪的 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;
 }

我的表结构:

这里

4

5 回答 5

2

pdo方案如下:

$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;
}
于 2013-07-14T18:17:35.787 回答
1

快速修复您的查询:

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

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

于 2013-07-14T18:21:15.400 回答
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'] . '"'; 

看看会发生什么

于 2013-07-14T18:12:16.213 回答
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']);

非常感谢你 !

于 2013-07-14T18:20:52.473 回答
-1

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

$sql = "SELECT * FROM system_sesje ";

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

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

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

于 2013-07-14T18:25:14.923 回答