$ wpdb->准备占位符%d%s,工作,但我不相信我做得最好

时间:2016-12-01 19:40:28

标签: php mysql wordpress prepare

我在努力了解准备占位符后发生的事情后进行了管理。我唯一的想法是我的表中没有一致的元素,我可以用它作为占位符的参考。

我使用过一个测试专栏,但我并不打算在我的生产插件中使用它。每个条目的列都设置为0,我将$ test设置为0.因此我的查询现在已经开始工作了。但这并不是真正有意义的安全功能,除非它动态调用引用数据库结果的东西。我看到的所有示例都依赖于查询中的set常量,但除非我只是在数据库中添加一个常量条目,否则我没有这个,但这看起来很愚蠢。

$test = 0;
$result = 
$wpdb->get_results( $wpdb->prepare
    ( "SELECT * FROM $my_noted_table_name WHERE id_can_view = %d ", $test));

有更好的方法吗?

提前致谢..

1 个答案:

答案 0 :(得分:0)

让我解释一下发生了什么。

prepare正在清理变量的值,将其插入指定占位符的位置,然后格式化SQL查询。然后返回的SQL查询字符串由$wpdb->get_results()处理。

第1步:

对于这行代码:

$wpdb->prepare( "SELECT * FROM $my_noted_table_name WHERE id_can_view = %d", $test );

这是发生的事情:

  1. 清理变量的值$test
  2. 使用已清理变量的值替换占位符。
  3. 数据库表名称是从$my_noted_table_name变量中提取的。
  4. 格式化SQL查询
  5. 对于占位符,%d表示该值为整数。如果是字符串,请改用%s。考虑使用PHP构造sprintfprintf

      

    d - 将参数视为整数,并以(带符号)十进制数表示。

         

    s - 将参数视为字符串并以字符串形式显示。

    因此,假设您的变量$test的值为100,数据库表的名称为countries。然后SQL查询字符串是:

    "SELECT * FROM `countries` WHERE `id_can_view` = 100;"
    

    了解$wpdb->prepare如何将输入的字符串转换为格式正确的SQL查询?

    您希望始终使用$wpdb->prepare()来处理此过程,因为它会保护您的数据库。