需要帮助格式化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...) }); });
答案 0 :(得分:2)
不要那样做!它对SQL注入攻击持开放态度。为了上帝的缘故,验证并逃避您的意见。
至少,将其重写为:
$query = "SELECT * FROM `".mysql_real_escape_string($_POST['tab'])."` WHERE plant_code = '".mysql_real_escape_string($_POST['plant_code'])."'";
答案 1 :(得分:1)
查询应该是:
"SELECT * FROM ".$_POST['tab']." WHERE plant_code =".$_POST['plant_code']
答案 2 :(得分:1)
查询中的句点(。)是不必要的,因为您没有打破引号。这些都应该有效:
$query = "SELECT * FROM $_POST['tab'] WHERE plant_code = $_POST['plant_code']";
或
$query = "SELECT * FROM " . $_POST['tab'] . " WHERE plant_code = " . $_POST['plant_code'];
编辑:当然,这不是解决巨大的注入安全漏洞:]
答案 3 :(得分:0)
您在$query
声明中的连接是错误的。
$query = "SELECT * FROM " . $_POST['tab'] . "WHERE plant_code = '" . mysql_real_escape_string($_POST['plant_code']) . "'";
就足够了。
答案 4 :(得分: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;