即使数据也选择不返回行

时间:2015-11-01 22:46:20

标签: php wordpress

我正在尝试访问由pod创建的表,这是一个名为palyer排名的自定义表。这是一个页面模板。

我不确定我是否正确地做了因为无论我做什么打印图标哪个不应该导致他们是我正在寻找的玩家ID的入口。

<?php  
$playerId='16-18-4500000';
  $myrows = $wpdb->get_results("SELECT * FROM 4hSIc_pods_player_ranking WHERE player_id='".$playerId."'" );
$num_rows = mysql_num_rows($myrows);
    if($num_rows) {
        echo "$num_rows Rows\n";
    }

    else

        {

echo "<li> <a href='#thanks' role='button' class='btn' data-toggle='modal'><i class='fa fa-hand-peace-o'></i>'".$playerId."</a></li>";
 }

?>

如果系统中没有挂起点,我只想打印图标。  enter image description here

1 个答案:

答案 0 :(得分:1)

您的方法存在一些问题:

您无法逃避数据 - wpdb课程有办法为您做到这一点,请确保您使用它们。

以下是如何重写您的查询以使用$wpdb->prepare()转义player_id

$myrows = $wpdb->get_results( $wpdb->prepare(
    "SELECT * FROM {$wpdb->prefix}pods_player_ranking
    WHERE player_id=%s", $playerId ) );

另一件事是你试图在一个实际上是一个数组的变量上使用PHP的mysql*函数($wpdb->get_results()返回一个数组而不是{{1} }})。

此外,当您只期望查询中的一个结果时,您可以使用$wpdb->get_row() - 因为这将直接以您指定的格式返回行。以下是这样的:

mysql_result

$row = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}pods_player_ranking WHERE player_id=%s", $playerId ), OBJECT ); 函数的第二个参数是以下三个参数之一:

  • OBJECT - 这将结果作为get_row - 一个简单对象
  • 的实例返回
  • ARRAY_A - 这会将结果作为关联数组返回(列名为键)
  • ARRAY_N - 这会将结果作为数字索引数组返回。

我还将stdClass之前的文本替换为pods_player_ranking,因为我认为这是您的表前缀。使用wpdb的prefix属性是一个好习惯,而不是对前缀进行硬编码(如果你编写的代码将由多个站点使用,你可能会遇到代码不能正常工作的问题)前缀不同)。

我建议的最后一件事是在开发新网站或处理新功能时使用调试(将此添加到您的wp-config.php:{$wpdb->prefix})。有时这可能会导致很难/无法浏览网站(如果插件或主题代码产生大量通知/错误消息),那么您可以使用此代码:

define( 'WP_DEBUG', true );

这样,无论何时将if ( isset( $_GET['debug'] ) ) { define( 'WP_DEBUG', true ); } 添加到当前URL,都将启用调试消息显示。

重点是,如果你启用了调试,你很可能会看到像这样的错误:

?debug