php - 无法使用 LIKE 从 Wordpress 数据库获取结果

标签 php mysql sql wordpress

查询如下

SELECT `sID` FROM `subscribers` where `Email` LIKE '%xxx@xxx.com%'

require_once($_SERVER['DOCUMENT_ROOT'].'/wp-load.php');
$hostname = "dd";
$username = "cc";
$password = "aa";
$dbName = "bb";


$conn = new mysqli($hostname, $username, $password);
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 
$conn -> select_db("$dbName") or die( "Unable to select database");

check_subscriber($email, $first, $last, $company, $tablename);
function check_subscriber($email, $first, $last, $company, $tablename)
{
    global $wpdb; 
    $emailid=mysql_real_escape_string($email);
    $subscribercheck = "SELECT `sID` FROM `$tablename` where `Email` LIKE '%$emailid%'";
    $subscriber_exists = "";
    $subscriber_exists = $wpdb -> get_results($wpdb->prepare("$subscribercheck",object));
    var_dump($subscriber_exists);

    if(count($subscriber_exists)>0){
        foreach ($subscriber_exists as $subs)
        {
            echo $sid = $subs-> sID;
        }
    }
    else {
        $wpdb -> insert('subscribers', array(
            'First Name' => $first,
            'Last Name' => $last,
            'Company' => $company,
            'Email' => $email,
            'Date' => date("Y-m-d H:i:s"),
        ));
    }
}

var_dump = NULL

我尝试在我们的数据库中运行查询并且它有效,但它似乎没有在这里运行。请帮忙!

每个变量都已定义。 var_dump = NULL 所以它转到 "else" 子句,其中 wpdb -> Insert 发生并起作用。

$subscriber_exists = $wpdb -> get_results($wpdb->prepare("$subscribercheck",object));

但是,即使我可以在我们的数据库中运行它,也没有给我任何值(value)。

最佳答案

以下是我发现的问题:

  • 您正在尝试手动建立数据库连接,而 Wordpress 已经通过 wp-config.php 为您设置好了。删除您用于连接的代码段并使用 $wpdb 对象运行您的查询。
  • 您正在使用 $wpdb->prepare() 但您没有正确设置必要的参数。如果你想使用准备好的语句,你需要先了解它们是如何工作的,read here
  • 因为您没有使用准备好的语句,所以在没有它的情况下运行您的正常查询。
  • 确保您的表位于为 wordpress 设置的同一数据库中。

这就是我重做您的代码的方式:

function check_subscriber($email, $first, $last, $company, $tablename) {
    global $wpdb;

    $email = $wpdb->esc_like($email);

    $query = "SELECT `sID` FROM `$tablename` where `Email` LIKE '%$email%'";

    $subscribers = $wpdb->get_results($query, object);

    if (count($subscribers) > 0) {
        foreach ($subscribers as $subs) {
            echo $sid = $subs->sID;
        }
    } else {
        $wpdb->insert('subscribers', array(
            'First Name' => $first,
            'Last Name' => $last,
            'Company' => $company,
            'Email' => $email,
            'Date' => date("Y-m-d H:i:s"),
        ));
    }
}

但是,如果您真的想使用准备好的语句,请使用:

function check_subscriber($email, $first, $last, $company, $tablename) {
    global $wpdb;

    $query = "SELECT `sID` FROM `$tablename` where `Email` LIKE %s";

    $like_email = '%' . $wpdb->esc_like($email) . '%';

    $subscribers = $wpdb->get_results(
        $wpdb->prepare($query, $like_email),
        object
    );

    if (count($subscribers) > 0) {
        foreach ($subscribers as $subs) {
            echo $sid = $subs->sID;
        }
    } else {
        $wpdb->insert('subscribers', array(
            'First Name' => $first,
            'Last Name' => $last,
            'Company' => $company,
            'Email' => $email,
            'Date' => date("Y-m-d H:i:s"),
        ));
    }
}

关于php - 无法使用 LIKE 从 Wordpress 数据库获取结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33656931/

相关文章:

php - 是否可以限制在 PHP 中调用方法的方式?

php - Basic Stripe 集成无法加载支付页面

php - 如何在 Memcache 或 Redis 中通过标签清除缓存?

mysql - Sequelize.js:包括意外。元素必须是模型、关联或对象

mysql - #1005 - 无法使用 MySQL 创建表 'workswell_database.skoleni' 新手用户

mysql - 如何获取存储过程中 SELECT 中多个字段的值

javascript - 如何根据下拉菜单选择使用数据库中的数据预填充表单?

mysql - sql 子查询返回 "Every derived table must have its own alias"

php - 如何在一个查询中从三个表中进行选择

sql - 使用递归 CTE 来解析组,而不是层次结构