php - 为wordpress编写外部api时出错?
问题描述
你好
我正在为我的 wordpress 网站编写一个外部 api。我的代码包括三个文件:
文件 01:Connect.php
class Connect{
private $con ;
public function __construct()
{
}
public function ConnectDb()
{
$this->con = mysqli_connect("localhost","root","","my_mydb");
mysqli_set_charset($this->con,"utf8");
if (!$this->con)
{
die("Connection error: " . mysqli_connect_error());
}
return $this->con;
}
}
文件 02:DbOperations.php
include_once ('Connect.php');
require_once ('../../wp-load.php');
class DbOperations{
private $con ;
public function __construct()
{
$dbCon = new Connect();
$this->con = $dbCon->ConnectDb();
}
public function get_all_posts()
{
$query = "SELECT post_author,post_date,post_content,post_title,post_name,comment_count FROM wp_users ";
$result = mysqli_query($this->con,$query,MYSQLI_USE_RESULT);
$num = mysqli_num_rows($result);
$allposts = array();
if (!$num==0)
{
while ($row=mysqli_fetch_array($result))
{
$allposts['post_title'] = $row['post_title'];
$allposts['post_author'] = $row['post_author'];
$allposts['post_date'] = $row['post_date'];
$allposts['post_content'] = $row['post_content'];
$allposts['post_name'] = $row['post_name'];
$allposts['comment_count'] = $row['comment_count'];
}
$allposts['error'] = false ;
$allposts['message'] = "Succeed";
}
else
{
$allposts['error'] = true ;
$allposts['message'] = "cant get all posts";
}
return $allposts;
}
public function isUserLogined($username,$password)
{
$query = "SELECT user_login,user_pass FROM wp_users WHERE user_login='".$username."'";
$result = mysqli_query($this->con,$query);
$nums = mysqli_num_rows($result);
if (!$nums==0)
{
$row = mysqli_fetch_assoc($result);
$user_login = $row['user_login'];
$user_pass = $row['user_pass'];
if (wp_check_password($password,$user_pass))
{
$loginResponse['error'] = false ;
$loginResponse['message'] = "Succees mysqli_fetch_assoc Error";
$loginResponse['user_login'] = $user_login;
$loginResponse['user_pass'] = $user_pass;
}
else
{
$loginResponse['error'] = true ;
$loginResponse['message'] = "wp_chech_password and mysqli_fetch_assoc Error";
$loginResponse['user_login'] = "";
$loginResponse['user_pass'] = "";
}
}
else
{
$loginResponse['error'] = true ;
$loginResponse['message'] = "Can not find user,Query Error in isUserLogined";
$loginResponse['user_login'] = "";
$loginResponse['user_pass'] = "";
}
return $loginResponse;
}
}
文件 03:myApi.php
include ('DbOperations.php');
$dbOperate = new DbOperations();
$resultArray = $dbOperate->get_all_posts();
echo json_encode($resultArray);
我将这三个文件放入目录:C:\xampp\htdocs\wp-includes\rest-api\
访问它的地址是: http://localhost/wp-includes/rest-api/myApi.php
但是当我在地址栏中输入时,我得到以下结果:
Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in C:\xampp\htdocs\wp-includes\rest-api\DbOperations.php on line 25
{"error":true,"message":"cant get all posts"}
我哪里错了?我搜索但一无所获
解决方案
尝试使用
if (!$num|| mysqli_num_rows($num) == 0){
代替
if (!$num==0){
还从 $result 中删除 MYSQLI_USE_RESULT
推荐阅读
- python - Keras - 通过测试所有可能的超参数来调整顺序模型
- python - 反向地理编码 Python Pandas 数据框
- ios - Cordova 离子打印插件在 iOs 中发送 nil
- javascript - 如何使用 Selenium 和 Java 提取不在其自身标签内的文本节点的文本?
- android - 重复 android:theme androidmanifest
- python - 如何在使用碰撞块计算 pi 时防止快速移动的物体通过静力学
- c# - 在try/catch中捕获异常后如何测试Api是否返回特定消息
- reactjs - 为什么在 React-Redux 中未定义 this.props.username?
- android - DiffUtil.ItemCallback
被调用两次 - html - 如何将下拉菜单对齐到 mat-card-title 元素的右侧?