通过Javascript传递MySQL查询

MaV*_*aVe 1 javascript php mysql jquery post

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

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

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

$query = $_POST['query'];
Run Code Online (Sandbox Code Playgroud)

并将其作为mysql_query的输入:

$query = mysql_query($query) or die(mysql_error());
Run Code Online (Sandbox Code Playgroud)

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

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

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

Web*_*net 5

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

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

使用Javascript

$.post('getDBData.php', {
   query: 'getTextsByUser',
   user: 'John'
});
Run Code Online (Sandbox Code Playgroud)

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
}
Run Code Online (Sandbox Code Playgroud)

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

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