使用$ _POST变量时,MySQL查询无法正常工作

时间:2013-01-06 14:44:52

标签: php mysql wordpress variables post

  

可能重复:
  How to include a PHP variable inside a MySQL insert statement

我想按名称选择Wordpress类别的类别ID。奇怪的是,如果我手动定义类别,它一切都很完美。

echo命令为我提供了类别名称,最后我在Variable $ catid中获得了类别ID。

但是,如果我通过表单发送它,echo命令给我与手动定义时完全相同的类别名称,但MySQL-Command不起作用,这意味着$ catid变量保持为空。

这里有没有人有这个想法,因为我无法理解为什么它在直接定义时起作用,而不是在完全相同的字符串通过表单发布时。下面的代码示例是我的代码的一部分,其中$ category变量通过表单传递。如果我要取消注释手动变量并对post变量进行注释,它将全部起作用。

// $category = "Manual"; // manually defined

$category = $_POST['category']; //defined through a form

echo $category;

$connect = mysql_connect(localhost,abc,def); 

if (!$connect) {
    die('Could not connect: '.mysql_error());
}

mysql_select_db("abc");
$queryresult = mysql_query("SELECT * FROM `wp_terms` WHERE `name`='$category' LIMIT 0,1");

while($row = mysql_fetch_array( $queryresult )) {
     $catid = $row[term_id];
}

1 个答案:

答案 0 :(得分:0)

确认帖子数据的内容是个好主意,如下所示:

print_r($_POST); die;

这将允许您查看您的变量是否甚至出现在提交中,我的赌注是您没有通过它,或者它是以另一个名称(甚至是拼写错误)来实现的。

如果没有表单和处理代码,很难回答这个问题,但是你可以通过将可变内容转储到屏幕来至少对数据进行解密。

希望这有帮助。

PS:这是在浪费资源:

echo "$category";

您可以使用:

echo $category;

PPS:最好清理变量以防止SQL注入,这段代码非常危险:

$category = $_POST['category'];
mysql_query("SELECT * FROM `wp_terms` WHERE `name`='$category' LIMIT 0 , 1");

如果您的变量正确地从PPOST传递,请尝试解决您的SQL查询:

$query = sprintf("SELECT * FROM wp_terms WHERE name='%s' LIMIT 0,1", $category);
print_r($query); die;

然后,如果您有一些数据库运行的接口,请尝试抛出查询并检查错误和结果(只是为了确认您的检索语句)。

如果这样可以正常工作,那么你肯定知道它与你的SQL连接语句有关,你需要找到你的PHP版本并转储$ connect的值。您是在共享托管环境或您自己的私人服务器上运行此代码吗?