嗯,我知道错误信息的基本原因。
问题是,我在我的头上。我找不到一个如何解决这个问题的例子,它更贴近我的“坏”代码(我也没有编写这个脚本)。
所以这是不好的部分:
$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
答案 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 ));
答案 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));