gpt4 book ai didi

php - MySQL make 查询包括包含另一个变量的 PHP 变量

转载 作者:太空宇宙 更新时间:2023-11-03 11:10:41 24 4
gpt4 key购买 nike

我已经尝试了几件事,但我无法在我的 php 代码中使用 MySQL 查询。请注意,当我对整数变量 $lastmsg 进行硬编码时,查询确实有效。

代码在两个实例中工作:

  1. 当页面加载时,查询运行,忽略 $pagination 因为 $lastmsg 没有设置。
  2. 一个按钮将 lastmsg 的值发送到此页面,该页面再次运行代码,这次查看 $pagination,因为 lastmsg 已设置。

同样,查询确实有效。证明它在第一个实例中运行得非常好,并且在变量被硬编码时正确返回。 Firebugs 报告 lastmsg 正在邮寄。

问题是查询没有收到 $lastmsg 的值(我没有返回任何值)。我知道这是因为 $lastmsg 位于 $pagination 中。

附言我知道它需要注入(inject)保护......我只是想让它工作:

if(isset($_POST['lastmsg']) &&is_numeric($_POST['lastmsg'])){
$lastmsg = $_POST['lastmsg'];
$pagination = 'AND $wpdb->posts.ID < ".$lastmsg."';
} else {
$pagination = '';
}

$pageposts = $wpdb->get_results($wpdb->prepare("
SELECT * FROM $wpdb->posts
LEFT JOIN $wpdb->term_relationships ON ($wpdb->posts.ID = $wpdb->term_relationships.object_id)
LEFT JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)
WHERE $wpdb->posts.post_status = 'publish'
AND $wpdb->posts.post_type = 'post'
AND $wpdb->posts.post_date < NOW()+INTERVAL 1 DAY
AND $wpdb->term_taxonomy.taxonomy = 'category'
AND $wpdb->term_taxonomy.term_id IN(3)
".$pagination."
ORDER BY $wpdb->posts.post_date DESC
LIMIT 10
"), OBJECT);

以下不工作

$pagination = 'AND $wpdb->posts.ID < ';
$pageposts = $wpdb->get_results($wpdb->prepare("
SELECT * FROM $wpdb->posts
LEFT JOIN $wpdb->term_relationships ON ($wpdb->posts.ID = $wpdb->term_relationships.object_id)
LEFT JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)
WHERE $wpdb->posts.post_status = 'publish'
AND $wpdb->posts.post_type = 'post'
AND $wpdb->posts.post_date < NOW()+INTERVAL 1 DAY
AND $wpdb->term_taxonomy.taxonomy = 'category'
AND $wpdb->term_taxonomy.term_id IN(3)
".$pagination."
".$lastmsg."
ORDER BY $wpdb->posts.post_date DESC
LIMIT 10
"), OBJECT);

有什么解决办法吗?

最佳答案

这不是您要查找的字符串:

$pagination = 'AND $wpdb->posts.ID < ".$lastmsg."';

这将留下文字 AND $wpdb->posts.ID < ".$lastmsg."里面$pagination当您将它交给 MySQL 时,该字符串不会做任何有用的事情。

你想要在外面使用双引号(用于插值)并且根本没有单引号:

$pagination = "AND $wpdb->posts.ID < $lastmsg";

或者,如果 $lastmsg是字符串而不是数字:

$pagination = "AND $wpdb->posts.ID < '$lastmsg'";

这应该能让您的第一个版本正常工作。

现在继续添加您所有的 mysql_real_escape_string电话。

关于php - MySQL make 查询包括包含另一个变量的 PHP 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8830399/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com