首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >通过将单引号转换为html实体来更新奇怪的错误

通过将单引号转换为html实体来更新奇怪的错误
EN

Stack Overflow用户
提问于 2018-02-06 20:22:23
回答 1查看 422关注 0票数 1

更新Julu 2018年:

我发现问题是另外一回事。打印错误方法将始终打印一条编码的html消息,如下所示。如果消息没有显示任何额外的信息,则表示SQL查询很好。

原始问题:

我尝试使用$wpdb-> invite_code方法更新WordPress,但是它返回奇怪的错误,似乎WordPress将单引号转换为html实体-‘

如果有人知道为什么会自动将单引号转换为HTML实体,请帮助我。

我无法使用任何WordPress内置方法来更新查询,因为问题似乎发生在准备好的语句中,它将在每个内置方法中使用。

WordPress数据库错误: UPDATE exhibitor_invite SET invite_code =‘;8j8mxkkubd0kppi082p’;其中id = 10

代码语言:javascript
运行
复制
     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;
        }
EN

回答 1

Stack Overflow用户

发布于 2018-07-30 12:58:11

也许为时已晚,但万一我没有遇到同样的问题,我花了几个小时寻找解决方案。

似乎wpdb对象的WordPress属性“更新”就是问题发生的地方。我找到的一个解决方案是将整个string存储在一个变量中,然后在使用它之前,通过字符串()函数传递这个变量。

PHP手册声明:

此函数用于创建可在SQL语句中使用的合法SQL字符串。给定的字符串被编码为转义的SQL字符串,同时考虑到连接的当前字符集。

您的解决方案可能像这样(未经测试)。

代码语言:javascript
运行
复制
$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 );
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48651336

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档