【问题标题】:Wordpress php get result from sql where special characterWordpress php从特殊字符的sql中获取结果
【发布时间】:2017-11-27 14:47:30
【问题描述】:

我有这个代码

$ntimes = $wpdb->get_var("SELECT Count(*) FROM wp_comp_review_list where email = $key->email");

我试图做的是计算电子邮件的数量where email = "sample@gmail.com"。其中要比较的电子邮件是从另一个 foreach 循环生成的。

我遇到以下错误:

“WordPress 数据库错误:[您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 '@gmail.com' 附近使用正确的语法]”

我尝试通过比较包含空格的名称来尝试。由于空间,我得到了同样的错误。

关于如何使用带有特殊字符的WHERE 的任何提示?

【问题讨论】:

  • 你的错误很清楚:你有无效的SQL语句。您应该通过正确替换变量来修复它。

标签: php mysql sql wordpress character


【解决方案1】:

电子邮件是一个字符串,所以你应该使用引号,where email = '$key->email' 虽然你也可以接受 SQL 注入,如果不是这样更安全,然后被黑客入侵..

所以你应该使用准备好的语句而不是prepare()

<?php
$results = $wpdb->get_results(
    $wpdb->prepare('
        SELECT Count(*) 
        FROM wp_comp_review_list 
        WHERE email = %s', 
        [
            $key->email
        ]
    )
);

这也应该可以使用esc_sql(),但尽量避免:

<?php
$email = esc_sql($key->email);
$wpdb->get_var("
    SELECT Count(*) 
    FROM wp_comp_review_list 
    WHERE email = '{$email}'"
);
?>

【讨论】:

  • 谢谢。我会用这个。虽然我不知道 sql injenction.. 但我会使用你的代码来保证安全。
  • 感谢 np,我不知道 wordpress ;p 只是 sql 注入。
【解决方案2】:

使用这个:

$ntimes = $wpdb->get_var("SELECT Count(*) FROM wp_comp_review_list where email = '$key->email'");

由于您的$key-&gt;email 有空格,它不再是一个单词,空格之后的下一个内容被视为 SQL 命令(不是)

【讨论】:

    【解决方案3】:

    你错过了条件中的引用''

    $ntimes = $wpdb->get_var("SELECT Count(*) FROM wp_comp_review_list where email = '$key->email'");
    

    【讨论】:

    • 哇!那行得通。我以前从未尝试过。非常感谢先生
    • @TimothyFigueroa 不过它可以让你使用 SQLi。
    • 当您签入一个 char、varchar、text 等条件时...您需要记住 tonuse 引用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-29
    • 2016-10-01
    • 2023-03-11
    • 2018-09-24
    • 1970-01-01
    相关资源
    最近更新 更多