-1

好吧,我知道错误消息的基本原因。

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

所以这是不好的部分:

$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 或其他东西......不确定,真的......任何帮助将不胜感激。

-埃文

4

2 回答 2

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

于 2013-10-31T19:40:03.037 回答
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));
于 2013-10-31T19:42:15.607 回答