$ wpdb-> update或$ wpdb->插入结果,在引号前添加斜杠

J L*_*Lee 21 php mysql wordpress

这个问题已在不同的地方提出过几次,但我没有找到一个明确而明确的答案.大多数解决方案涉及人们说要在php.ini文件(我做过)上禁用Magic Quotes或修改核心WP文件.

无论如何,问题是这样的:为什么每次我使用$ wpdb-> insert或$ wpdb-> update都会在任何单引号之前添加斜杠.例如:

我吃过草莓变得I \'已经吃过草莓

这是我使用的示例代码:

$id = $_POST['id'];
$title = $_POST['title'];
$message = $_POST['message'];

$wpdb->update('table_name', array('id'=>$id, 'title'=>$title, 'message'=>$message), array('id'=>$id))
Run Code Online (Sandbox Code Playgroud)

同样的问题在这里:Wordpress数据库输出 - 删除SQL注入转义但它从来没有解决过"禁用魔术引号"

J L*_*Lee 51

花了一天的时间,答案如下:

Wordpress在$ _POST声明中转义,而不是在实际插入时,这是奇怪的.

$id = stripslashes_deep($_POST['id']); //added stripslashes_deep which removes WP escaping.
$title = stripslashes_deep($_POST['title']);
$message = stripslashes_deep($_POST['message']);

$wpdb->update('table_name', array('id'=>$id, 'title'=>$title, 'message'=>$message), array('id'=>$id));
Run Code Online (Sandbox Code Playgroud)

这样做意味着WP不会在任何引号之前添加斜杠.

  • 生命保护.谢谢@J Lee.如果不在这里,这肯定需要一些时间来调试. (3认同)

Rya*_*ger 6

更多信息 - WordPress决定通过添加"魔术引号"让人们认为他们疯了,即使你已经从3.0版开始关闭它.对$ _REQUEST,$ _GET,$ _POST,$ _COOKIE或$ _SERVER的任何访问都将受到影响.见wp-includes/load.php.

 /* Add magic quotes to $_GET, $_POST, $_COOKIE, and $_SERVER.
 * @since 3.0.0
 */
function wp_magic_quotes() {
        // If already slashed, strip.
        if ( get_magic_quotes_gpc() ) {
                $_GET    = stripslashes_deep( $_GET    );
                $_POST   = stripslashes_deep( $_POST   );
                $_COOKIE = stripslashes_deep( $_COOKIE );
        }

        // Escape with wpdb.
        $_GET    = add_magic_quotes( $_GET    );
        $_POST   = add_magic_quotes( $_POST   );
        $_COOKIE = add_magic_quotes( $_COOKIE );
        $_SERVER = add_magic_quotes( $_SERVER );

        // Force REQUEST to be GET + POST.
        $_REQUEST = array_merge( $_GET, $_POST );
}
Run Code Online (Sandbox Code Playgroud)