通过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 。 这尤其适用于=
符号。