查询如下
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/