1

在 Javascript 函数中,我有以下 JQuery,我在其中调用 PHP 脚本(即 getDBData.php)从查询中获取数据库数据:

$("#dbcontent").load("getDBData.php", {query: "SELECT * FROM `texts` WHERE name='John' LIMIT 10;"});

在 getDBData 中,我通过 POST 获取此查询:

$query = $_POST['query'];

并将其作为 mysql_query 的输入:

$query = mysql_query($query) or die(mysql_error());

但是,我收到以下 MySQL 错误:

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 '\'John\' LIMIT 10' 附近使用正确的语法

这里有什么问题?我想它在传递查询时与字符编码有关,但似乎没有正确。

4

3 回答 3

5

在任何情况下,您都不应该这样做。您应该传递可用于构建正确查询的参数。

至少做这样的事情......

Javascript

$.post('getDBData.php', {
   query: 'getTextsByUser',
   user: 'John'
});

PHP

$queries = array(
   'getTextsByUser' => 'SELECT * FROM texts WHERE name = ?',
   'getNewsById' => 'SELECT * FROM news WHERE id = ?'
);
$stmt = $dbConnection->prepare($queries[$_POST['query']);
$stmt->bind_param('s', $_POST['user']);

$stmt->execute();

$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
    // do something with $row
}

然后getUsers通过 ajax 来确定要运行哪个查询。

注意:如果您刚刚开始这个项目,mysql_query()已被弃用,您应该考虑切换到mysqli

于 2013-02-14T17:30:14.683 回答
1

正如其他人指出的那样,不要这样做!Webnet 的解决方案要好得多!

但我相信我知道如何解决你最初的问题。我也有过一次,在解析 JSON 时,使用stripslashes().

$query = stripslashes($_POST['query']);
mysql_query($query);
于 2013-02-14T17:42:49.263 回答
0

正如许多人所说,这是非常危险的。但是,我认为失败的是您需要使用 URL 编码指定查询。请参阅http://en.wikipedia.org/wiki/Query_string#URL_encoding。这尤其适用于=符号。

于 2013-02-14T17:28:50.113 回答