PHP:缺少wpdb :: prepare()的参数2

时间:2013-10-31 19:32:39

标签: php wordpress

嗯,我知道错误信息的基本原因。

问题是,我在我的头上。我找不到一个如何解决这个问题的例子,它更贴近我的“坏”代码(我也没有编写这个脚本)。

所以这是不好的部分:

$querystr = "SELECT M.post_id from $wpdb->postmeta M
  JOIN $wpdb->posts P
      on P.ID = M.post_id
  WHERE P.post_type = '".AttorneyProfilePosttype::$slug."'
AND M.meta_key = 'user_id'
AND M.meta_value = '".$author_id."'";

$post_id = $wpdb->get_var($wpdb->prepare($querystr));

我相信我应该添加一个$ s,$ d或者其他东西......不确定,真的......任何帮助都会受到赞赏。

-Evan

2 个答案:

答案 0 :(得分:0)

为什么不直接传递查询中的参数

global $wpdb;
$querystr = "SELECT M.post_id from $wpdb->postmeta M
  JOIN $wpdb->posts P
      on P.ID = M.post_id
  WHERE P.post_type = '".AttorneyProfilePosttype::$slug."'
AND M.meta_key = 'user_id'
AND M.meta_value = '".$author_id."'";

$post_id = $wpdb->get_var($querystr);

或试试这个

$wpdb->query( 
    $wpdb->prepare("SELECT M.post_id from $wpdb->postmeta M
      JOIN $wpdb->posts P
          on P.ID = M.post_id
      WHERE P.post_type = %s
    AND M.meta_key = 'user_id'
    AND M.meta_value =%d",AttorneyProfilePosttype::$slug,$author_id ));

wpdb

答案 1 :(得分:0)

使用准备好的查询可以防止sql注入。而AFAIK这是实现这一目标的正确方法:

$querystr = "SELECT M.post_id from $wpdb->postmeta M
  JOIN $wpdb->posts P
      on P.ID = M.post_id
  WHERE P.post_type = %s
AND M.meta_key = 'user_id'
AND M.meta_value = %s";

$post_id = $wpdb->get_var($wpdb->prepare($querystr, AttorneyProfilePosttype::$slug, $author_id));