通过Javascript传递MySQL查询

在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’附近使用正确的语法

这可能有什么问题? 我想它在传递查询时与字符编码有关,但似乎没有把它弄好。

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

至少做这样的事….

使用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 } 

然后通过ajax传递getUsers来确定要运行的查询。

注意:如果您刚刚开始这个项目, 则不推荐使用mysql_query() ,您应该考虑切换到mysqli 。

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

但我相信我知道如何解决你的初始问题。 解析JSON时我也曾经使用它,并使用stripslashes()解决了它。

 $query = stripslashes($_POST['query']); mysql_query($query); 

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