将自定义表中的单行提取到给定ID

时间:2013-04-18 作者:Harman

当我想通过函数调用提供用户名从WordPress数据库的自定义表中获取一行时,它不起作用。然而,当我在查询的where子句中提到用户名时,它是有效的。为什么会这样?

我正在使用以下代码:

function gettingonly($phl) {

global $wpdb;
$mylink = $wpdb->get_row("
    SELECT *
    FROM $wpdb->wp_philosophy_philosopher
    WHERE philosopher=%s",
    $phl
);
if ($mylink) {
    print "<input type=\'text\' value=\'".$mylink->philosopher."\'>
        <input type=\'text\' value=\'".$mylink->about."\'>";
    }
}
这是通过PHP函数提供值来获取行的正确方法吗?

3 个回复
SO网友:RRikesh

$wpdb->wp_philosophy_philosopher 此处不起作用,因为它尚未定义。$wpdb->table_name 仅适用于默认表。

您可以使用以下方法创建自己的:

$wpdb->philosophy_philosopher = $wpdb->prefix . "philosophy_philosopher"; 
请注意wp_ 只是表前缀,此处已省略,因为不同的安装可能有不同的前缀,并且如果更改表前缀,代码将停止工作。

您可以将代码更新为:

function gettingonly($phl) {

  global $wpdb;
  $wpdb->philosophy_philosopher = $wpdb->prefix . "philosophy_philosopher"; 
  $mylink = $wpdb->get_row("SELECT * FROM $wpdb->philosophy_philosopher WHERE philosopher=%s",$phl);
  #the rest of your code
}
同时,学会prepare your statements.

SO网友:dipali

试试这个。

function gettingonly( $phl ) {

    global $wpdb;
    $mylink = $wpdb->get_row( "SELECT * FROM wp_philosophy_philosopher WHERE philosopher="."\'".$phl."\'" );

    if( $mylink ){
        print "<input type=\'text\' value=\'" . $mylink->philosopher . "\'>
        <input type=\'text\' value=\'" . $mylink->about . "\'>";
    }
}
有关更多信息,请阅读WPDB WordPress Codex Entry.

SO网友:s_ha_dum

您需要运行查询$wpdb->prepare. 照原样,您正在发送一个文本SELECT * FROM $wpdb->wp_philosophy_philosopher WHERE philosopher=%s 作为查询。(The$phl 完全脱落。)这将触发MySQL错误。

$mylink = $wpdb->get_row($wpdb->prepare("
    SELECT *
    FROM {$wpdb->prefix}philosophy_philosopher
    WHERE philosopher=%s",
    $phl
));
如另一个答案所述,$wpdb->wp_philosophy_philosopher 未设置,这也会触发错误,因此我将其更改为{$wpdb->prefix}philosophy_philosopher.

如果你有debugging enabled 你自己就会发现这些问题。最好在开发过程中启用调试,最好在开发服务器上进行调试。

结束