【问题标题】:Wordpress wpdb not getting result from databaseWordpress wpdb 没有从数据库中获取结果
【发布时间】:2017-11-11 05:43:50
【问题描述】:

大家好,我确定我遗漏了一些东西,但我不知道为什么这不起作用!所以我有一个表格和一些数据,我正在尝试获取图像列,但由于某种原因,它不起作用。

这就是我得到的(空网址):

<div class="forma_reservas_datos_imagen imgPack" style="background-image:url()"></div>

PHP

<?php 

global $wpdb;

$tablePacks = 'packs';

$res =  "SELECT * FROM ".$tablePacks." where nom_pack_get = '".$_GET["pack"]."'";

$packImg = $wpdb->get_results($res, ARRAY_A);

if(count($packImg) == 1){
    ?>
    <div class="forma_reservas_datos_imagen imgPack" style="background-image:url(<?php echo $packImg->imatge_url; ?>)">
<?php   

}

?>

【问题讨论】:

  • 您的代码容易受到SQL injection 攻击。您应该通过mysqliPDO 驱动程序使用带有绑定参数的准备好的语句。 This post 有一些很好的例子。
  • 谢谢,我对 PDO 了解不多,所以我会在未来某个时间网站全部设置并正常工作时实施它
  • 不要那样做。学习PDO,很简单。否则,您将学习如何从备份中恢复被入侵的网站。
  • @JJCarlk3,尝试 var_dump($packIg);首先,检查里面有什么;如果你仍然坚持不使用 PDO,至少,请以任何方式清理你的 GET['pack'] 变量;
  • 添加语言格式

标签: php html mysql wordpress


【解决方案1】:

$packImg 将是一个关联数组的数组,没有对象,因此您应该将其用作$packImg[0]["imatge_url"]

正如其他人在 cmets 中指出的那样,请注意 SQL 注入。使用wpdb's prepare method:

$res = $wpdb->prepare("SELECT * FROM ".$tablePacks." where nom_pack_get = %s", $_GET["pack"]);

prepare 将返回可以安全发送到数据库的 SQL(而且您不必一直输入 '" . $myvar . "',它确实有很大帮助,同时也使您的代码安全)。

【讨论】:

  • 谢谢你,我会试试看,如果它有效,会告诉你。你们可能是对的,我必须学习 pdo 和 sql 注入。只是我想,像我这样普通的小企业,为什么会有人想要破解它?但是,是的,我想这可能发生在任何人身上。
  • 很高兴它可以工作。关于 SQL 注入:您可能不会被专门针对。但是有些机器人只是大量检查网站,并将操纵通过查询字符串传递的变量,并将其发现报告给它们的所有者。把他们想象成一个人只是检查你的门是否锁着,而不是试图打开它,然后决定闯入你的房子是否值得。
  • 这是有道理的,从现在开始我将牢记这一点,并将用这些准备语句替换我所有的 wpdb 查询,非常感谢!
猜你喜欢
  • 2013-06-28
  • 1970-01-01
  • 1970-01-01
  • 2015-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多