更新Julu 2018年:
我发现问题是另外一回事。打印错误方法将始终打印一条编码的html消息,如下所示。如果消息没有显示任何额外的信息,则表示SQL查询很好。
原始问题:
我尝试使用$wpdb-> invite_code方法更新WordPress,但是它返回奇怪的错误,似乎WordPress将单引号转换为html实体-‘
如果有人知道为什么会自动将单引号转换为HTML实体,请帮助我。
我无法使用任何WordPress内置方法来更新查询,因为问题似乎发生在准备好的语句中,它将在每个内置方法中使用。
WordPress数据库错误: UPDATE exhibitor_invite SET invite_code =‘;8j8mxkkubd0kppi082p’;其中id = 10
function createCode() {
$length = 20;
$inviteCode = "";
$characters = "0123456789abcdefghijklmnopqrstuvwxyz";
for ($p = 0; $p < $length; $p++) {
$inviteCode .= $characters[mt_rand(0, strlen($characters))];
}
return $inviteCode;
}
function updateCode($id) {
global $wpdb;
$wpdb->show_errors();
$prefix = $wpdb->prefix;
$invite_code = createCode() ;
// I tried to esc the string, but it doesn't work
// $invite_code = $wpdb->esc_like($invite_code);
// I also tried to use normal query, but it return the same error
// $affected_rows = $wpdb->query( $wpdb->prepare(
// " UPDATE {$wpdb->prefix}exhibitor_invite SET invite_code = %s WHERE id = %d", $invite_code, $id ));
$affected_rows = $wpdb->update( $prefix.'exhibitor_invite',
array('invite_code' => $invite_code),
array('id' => $id),
'%s',
'%d' );
$wpdb->print_error();
if(!is_bool($affected_rows)) {
return $affected_rows > 0;
}
return $affected_rows;
}
发布于 2018-07-30 12:58:11
也许为时已晚,但万一我没有遇到同样的问题,我花了几个小时寻找解决方案。
似乎wpdb对象的WordPress属性“更新”就是问题发生的地方。我找到的一个解决方案是将整个string存储在一个变量中,然后在使用它之前,通过字符串()函数传递这个变量。
PHP手册声明:
此函数用于创建可在SQL语句中使用的合法SQL字符串。给定的字符串被编码为转义的SQL字符串,同时考虑到连接的当前字符集。
您的解决方案可能像这样(未经测试)。
$sql_string =
"
UPDATE ${prefix}exhibitor_invite
SET invite_code = %s
WHERE id = %d
";
//procedural style
mysqli_real_escape_string( $your_conn_to_server, $sql_string );
//update
$wpdb->update( $wpdb->prepare(
$sql_string,
array(
$invite_code,
$id
)
), OBJECT );
https://stackoverflow.com/questions/48651336
复制相似问题