MySQL_REAL_ESPRY_STRING的替代方案

时间:2014-05-20 作者:Allen

我有一个WordPress插件,我需要查看数据库中是否存在某个标题。两年来,该代码运行良好:

$myposttitle= $wpdb->get_results(
 "select post_title from $wpdb->posts
  where post_title like \'%".  mysql_real_escape_string($myTitle) . "%\'"
);
但是,使用php 5.5。和WP 3.9.1,这会导致错误,因为mysql_real_escape_string 已弃用。

关于哪些其他功能将正确地避开$myTitle 现在我不能使用mysql_real_escape_string 不再

谢谢

2 个回复
最合适的回答,由SO网友:gmazzap 整理而成

在WordPress中使用数据库时,绝不应使用低级别mysql_*mysqli_* 功能。

始终使用$wpdb 方法,在您的情况下,您应该使用prepare():

$query = $wpdb->prepare(
  "SELECT post_title from $wpdb->posts
  WHERE post_title LIKE %s",
  "%" . $myTitle . "%"
);
此外,一旦你得到了一个专栏,你就可以更轻松地使用get_col 而不是get_results:

$myposttitle = get_col( $query );

SO网友:Otto

prepare() 给出的答案部分正确,如果确实需要手动转义SQL语句的字符串,请使用esc_sql().

对于将字符串转义到like语句中的特定情况,应该更正确地这样写:

$query = $wpdb->prepare(
  "SELECT post_title from $wpdb->posts
  WHERE post_title LIKE %s",
  "%" . $wpdb->esc_like( $myTitle ) . "%"
);
$wpdb->esc\\u like()是必要的,以便正确转义搜索短语中可能存在的任何百分号、下划线或反斜杠。请注意,$wpdb->esc\\u like()不返回准备好的输入,它只转义like中使用的特殊字符。因此,仍然需要prepare()。

结束

相关推荐

检测$wpdb->GET_RESULTS()生成的错误

使用$wpdb->get\\u results()时如何检测错误?例如:$result = $wpdb->get_results(\"SELECT * FROM this is not a valid query\"); 前面的代码不会生成任何异常或错误;它只是将$result设置为空数组。我们如何可靠地检测由get\\u results()生成的错误?