通过 Javascript 传递 MySQL 查询

Posted

技术标签:

【中文标题】通过 Javascript 传递 MySQL 查询【英文标题】:Passing MySQL query via Javascript 【发布时间】:2013-01-30 14:11:56 【问题描述】:

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

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

【问题讨论】:

强制:mysql_* 函数将是 deprecated in PHP 5.5。不建议编写新代码,因为它会在未来被删除。相反,MySQLi 或 PDO 和 be a better PHP Developer。 这是一种极其危险的做法。 如果我决定将DELETE * FROM texts 查询传递给您的PHP 脚本怎么办?什么会阻止我这样做?你确定你还想mysql_query($query)就可以了吗?我个人不会。 可怕,可怕,可怕的想法。 重申一下,这是一个糟糕的主意,但它似乎失败了,因为您的报价被转义了。你有魔术引号吗? 【参考方案1】:

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

【讨论】:

jQuery 将正确地 URL 编码您作为键/值对参数传递给 $.load 函数的所有内容。您无需进行任何手动编码。【参考方案2】:

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

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

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。

【讨论】:

【参考方案3】:

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

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

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

【讨论】:

以上是关于通过 Javascript 传递 MySQL 查询的主要内容,如果未能解决你的问题,请参考以下文章

Socket.io、Node.js:如何在 javascript.js 中将 javascript 变量传递给 mysql 查询?

通过查询字符串将变量传递到javascript中

通过 AJAX 将数组从 php 传递到 javascript

如何通过ajax将mysql结果作为json传递

使 javascript 字符串 sql 友好

通过 onchange 事件将 SELECT 的值传递给 Javascript 函数?