我在努力了解准备占位符后发生的事情后进行了管理。我唯一的想法是我的表中没有一致的元素,我可以用它作为占位符的参考。
我使用过一个测试专栏,但我并不打算在我的生产插件中使用它。每个条目的列都设置为0,我将$ test设置为0.因此我的查询现在已经开始工作了。但这并不是真正有意义的安全功能,除非它动态调用引用数据库结果的东西。我看到的所有示例都依赖于查询中的set常量,但除非我只是在数据库中添加一个常量条目,否则我没有这个,但这看起来很愚蠢。
$test = 0;
$result =
$wpdb->get_results( $wpdb->prepare
( "SELECT * FROM $my_noted_table_name WHERE id_can_view = %d ", $test));
有更好的方法吗?
提前致谢..
答案 0 :(得分:0)
让我解释一下发生了什么。
prepare
正在清理变量的值,将其插入指定占位符的位置,然后格式化SQL查询。然后返回的SQL查询字符串由$wpdb->get_results()
处理。
对于这行代码:
$wpdb->prepare( "SELECT * FROM $my_noted_table_name WHERE id_can_view = %d", $test );
这是发生的事情:
$test
$my_noted_table_name
变量中提取的。对于占位符,%d
表示该值为整数。如果是字符串,请改用%s
。考虑使用PHP构造sprintf
或printf
。
d - 将参数视为整数,并以(带符号)十进制数表示。
s - 将参数视为字符串并以字符串形式显示。
因此,假设您的变量$test
的值为100,数据库表的名称为countries
。然后SQL查询字符串是:
"SELECT * FROM `countries` WHERE `id_can_view` = 100;"
了解$wpdb->prepare
如何将输入的字符串转换为格式正确的SQL查询?
您希望始终使用$wpdb->prepare()
来处理此过程,因为它会保护您的数据库。