php - 使用 $_POST 变量时 MySQL 查询不工作

标签 php mysql wordpress variables post

<分区>

Possible Duplicate:
How to include a PHP variable inside a MySQL insert statement

我想通过名称选择 Wordpress 类别的类别 ID。奇怪的是,如果我手动定义类别,一切都会完美无缺。

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

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

这里有没有人有想法,因为我无法理解为什么它在直接定义时有效,但在通过表单发布完全相同的字符串时却无效。下面的代码示例是我的代码的一部分,其中 $category 变量通过表单传递。如果我取消注释 manual 变量并注释 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];
}

最佳答案

确认您的帖子数据的内容是个好主意,像这样:

print_r($_POST); die;

这将允许您查看您的变量是否甚至出现在提交中,我敢打赌要么您没有传递它,要么它以另一个名称(甚至可能是拼写错误)通过。

如果没有表单和处理代码,很难回答这个问题,但您至少可以通过将变量内容转储到屏幕来调试数据。

希望这对您有所帮助。

PS:这是在浪费资源:

echo "$category";

你可以使用这个:

echo $category;

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

$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;

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

如果这一切正常,那么您肯定知道它与您的 SQL 连接语句有关,您将需要找到您的 PHP 版本并转储 $connect 的值。您是在共享托管环境还是您自己的私有(private)服务器上运行此代码?

关于php - 使用 $_POST 变量时 MySQL 查询不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14183188/

相关文章:

wordpress - WP REST API orderby meta_value

php - 我网站上的 404 机器人攻击(各种 DDoS)

php - WordPress add_rewrite_rule 不起作用。为什么?

php - Homebrew 软件在 Mac High Sierra 上的哪里安装 PHP?

javascript - 客户端退出时 PHP SSE 脚本不会死

java - Java中通过SSH远程访问mySQL

mysql - 转义变量mysql密码

php - 使用 ORDER BY 或 PHP 排序函数对 MySQL 查询进行排序

php - 提交 summernote 表单时 sql 中的特殊字符错误

php - 正则表达式从 url 中过滤 int