将wpdb preparate与变量一起使用时,会将其转换为一个大字符串

时间:2021-07-14 作者:compil3r

我试图从wordpress数据库中的自定义表中获取数据,以便根据访问的产品(我使用变量)显示不同的内容这是一家商店。

到目前为止,我已经:

$sku = $wpdb->esc_like($product->get_sku())."%";
$sql = $wpdb->prepare(\'SELECT * FROM `table` WHERE `sku` LIKE "\'.$sku.\'"\');
$result = $wpdb->get_results($sql);
var_dump($result);
我得到:

array(0) {
}
如果我放置一个测试sku而不是变量,它将返回良好的结果:

$sql = "SELECT * FROM `table` WHERE `sku` LIKE \'%DCAT19%\' LIMIT 1";
$result = $wpdb->get_results($sql);
echo $sql;
var_dump($result); 
我得到:

SELECT * FROM `table` WHERE `sku` LIKE \'%DCAT19%\' LIMIT 1 

array(1) {
  [0]=>
  object(stdClass)#7675 (24) {
    ["id"]=>
    string(1) "1"
    ["sku"]=>
    string(17) "DCAT19MDIXHUEFL-L"
    ["fieldcount"]=>
    string(1) "4"
...etc
但我需要这个变量才能工作,所以它可以根据访问的产品而变化。

现在,如果我在使用变量时回显$sql的结果,即:

$sql = $wpdb->prepare(\'SELECT * FROM `table` WHERE `sku` LIKE "\'.$sku.\'"\');
它给出一个长字符串,而不是%(!!!):

SELECT * FROM `table` WHERE `sku` LIKE "DCSS20MBJOF01HB{0ff8bf1af1220a9d0556b6de44274e60e96a206d5cac40b1b55605b27fe76b4a}"
我不知道会发生什么!!我想这可能打破了这个疑问?不知道下一步该怎么办。

我也尝试过(使用变量):

双转义%

  • 引用表名和列名,使用sprintf调用具有%s的变量,得到相同的结果。。。零和/或长字符串中的数组,而不是%中的数组。

    那么,如果有人能告诉我,我做错了什么?提前非常感谢。

  • 1 个回复
    最合适的回答,由SO网友:compil3r 整理而成

    结果是prepare 语法错误,由于csv导入错误,我的表不完整。因此,总结经验教训,检查手册的语法,然后检查(仔细检查!)您的桌子。幸亏TomSally 对于他们的评论,他们帮助我重新思考我做错了什么。

    相关推荐

    使用新的WP-Query()从循环中过滤后期格式;

    嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post