1

需要帮助格式化 mySQL 查询字符串。以下查询返回“解析错误,需要 T_STRING 或 T_VARIABLE”

PHP:

<?php


include 'db_connect.php';

mysql_select_db($databaseName, $con);

$query = "SELECT * FROM .$_POST['tab']. WHERE plant_code = .$_POST['plant_code']";

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

$row = mysql_fetch_assoc($result);

echo json_encode($row);

?>

jQuery:

$('#profiles_desktops').click(function(){
                $.post("php/loadProfile.php", {plant_code : selectedSite, tab : "profiles_desktops"}, function(result){ (do something here...) });  });
4

5 回答 5

3

不要那样做!它对 SQL 注入攻击很开放。看在上帝的份上,验证并转义您的输入。

至少,将重写为:

$query = "SELECT * FROM `".mysql_real_escape_string($_POST['tab'])."` WHERE plant_code = '".mysql_real_escape_string($_POST['plant_code'])."'";
于 2012-04-12T22:09:09.173 回答
1

查询中的句点 (.) 是不必要的,因为您没有中断引号。这些中的任何一个都应该起作用:

$query = "SELECT * FROM $_POST['tab'] WHERE plant_code = $_POST['plant_code']";

或者

$query = "SELECT * FROM " . $_POST['tab'] . " WHERE plant_code = " . $_POST['plant_code'];

编辑:当然,这不是解决巨大的注入安全漏洞:]

于 2012-04-12T22:08:14.617 回答
1

查询应该是:

"SELECT * FROM ".$_POST['tab']." WHERE plant_code =".$_POST['plant_code']
于 2012-04-12T22:06:46.063 回答
0

您在声明中的串联$query是错误的。

$query = "SELECT * FROM " . $_POST['tab'] . "WHERE plant_code = '" . mysql_real_escape_string($_POST['plant_code']) . "'";

就足够了。

于 2012-04-12T22:09:05.953 回答
0

应该:

$query = "SELECT * FROM ".$_POST['tab']." WHERE plant_code = ".$_POST['plant_code'];

需要将 php 变量用双引号括起来(并保留最后一个,因为您以变量结尾,或者不是双引号,而是省略点,因为 PHP 会看到它的变量并将它们转换为之前的值查询运行。此外,由于某种原因,sql 不喜欢括号中的数组变量。尝试将所有值放入变量中,这也更易于阅读:

$tab = $_POST['tab'];
$plant = $_POST['plant_code'];
$query = "SELECT * FROM ".$tab." WHERE plant_code = ".$plant;
于 2012-04-12T22:10:55.100 回答