Php 从msqli::multi_查询获取行时遇到问题
我有一个包含许多语句的sql查询。它:Php 从msqli::multi_查询获取行时遇到问题,php,sql,mysql,multi-query,user-variables,Php,Sql,Mysql,Multi Query,User Variables,我有一个包含许多语句的sql查询。它: 设置用户变量 调用存储过程 调用另一个存储过程 选择一些数据 我知道这个查询是正确的,因为我已经在MySQL Workbench中在同一个用户下对它进行了测试。问题是: set @current_post = 535; /* 535 for testing, this will be a variable */ call under_user_type(@currrent_post, @user_type, @user_id); call get_cat
set @current_post = 535; /* 535 for testing, this will be a variable */
call under_user_type(@currrent_post, @user_type, @user_id);
call get_category(@current_post, @category);
select p.post_title, p.post_name,
(
swell_wp.post_score(p.ID)
) as score,
(
swell_wp.is_under_user(p.ID, @user_type, @user_id)
) as under_user,
(
swell_wp.is_under_category(p.ID, @category)
) as under_category
from wp_posts as p
where p.post_type = 'post'
and p.id != @current_post
and p.post_status = 'publish'
having (
under_user = true
or under_category = true
)
order by score desc;
它只是存储在一个字符串中:$sql
。然后,我用PHP对其执行此操作:
$query = new MySQLi(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
$query->multi_query($sql);
do {
$query->next_result();
} while( ! $result = $query->use_result() );
print_r($result);
这将打印一个结果对象,但该对象为空。尝试迭代也不会产生任何结果
我做错了什么?我甚至可以像这样使用用户变量吗?或者我需要将过程转换为存储函数并执行三个单独的查询吗?您显然没有从结果中获取行。请将代码更改为此,它将打印结果
$query = new MySQLi(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
$query->multi_query($sql);
do {
/* store first result set */
if ($result = $query->use_result())
{
while ($row = $result->fetch_row())
{
print_r($row);
}
$result->close();
}
/* print divider */
if ($query->more_results())
{
printf("-----------------\n");
}
} while ($query->next_result());
试试这个:
$query = new MySQLi(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
if ($query->multi_query($sql)) {
do {
if ($result = $query->use_result()) {
while ($row = $result->fetch_row()) {
printf("%s\n", $row[0]);
}
$result->free();
}
} while ($query->next_result());
} else {
echo 'ERROR FOR QUERY!';
}
这将帮助您捕获任何错误。此外,我认为您的使用结果需要与下一个使用结果交换
更新:另一件事,您是否检查以确保传递给查询的变量实际包含数据?打印我们的查询,以确保您可以在数据库中运行查询并手动获取结果。我有所有这些,但我的结果是空的——尝试获取行目前没有任何作用,因为我无法获取任何结果。我从mysql workbench复制了查询。但是我确实让它工作了,有两个问题:第一个问题是我想我需要使用
mysqli::store_result
,而不是使用result。第二点是,我认为打印$result
可以显示其内容,而无需在其上循环。我错了,用文档代码让它工作了