Php 如何使用mysqli_multi_query()从SELECT查询中获取结果集?
我的问题是:Php 如何使用mysqli_multi_query()从SELECT查询中获取结果集?,php,mysqli,resultset,mysqli-multi-query,Php,Mysqli,Resultset,Mysqli Multi Query,我的问题是: CREATE TEMPORARY TABLE `hcaconsumptions_temp` ( `DeviceID` INT (11) NOT NULL, `TimeStamp` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `Consumption` FLOAT NOT NULL, `DeviceBrand` VARCHAR (255) CHARA
CREATE TEMPORARY TABLE `hcaconsumptions_temp` (
`DeviceID` INT (11) NOT NULL,
`TimeStamp` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`Consumption` FLOAT NOT NULL,
`DeviceBrand` VARCHAR (255) CHARACTER
SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`SerialNumber` VARCHAR (255) CHARACTER
SET utf8 COLLATE utf8_unicode_ci NOT NULL
) ENGINE = MyISAM DEFAULT CHARACTER
SET = utf8 COLLATE = utf8_unicode_ci;
INSERT INTO hcaconsumptions_temp
(DeviceBrand, SerialNumber, `TIMESTAMP`, Consumption)
VALUES
('Adunos','24100008','2013-01-14 19:39:48','157'),
('Adunos','24100010','2013-01-14 18:50:38','134'),
...
('Adunos','24100019','2013-01-14 18:40:58','117'),
('Adunos','24100020','2013-01-14 18:42:22','74');
UPDATE hcaconsumptions_temp
SET DeviceID = (
SELECT
DeviceID
FROM
hcadevices
WHERE
hcadevices.DeviceBrand = hcaconsumptions_temp.DeviceBrand
AND hcadevices.SerialNumber = hcaconsumptions_temp.SerialNumber
);
SELECT
count(DeviceID)
FROM
hcaconsumptions_temp
WHERE
DeviceID = '0';
正如您在最后看到的,有SELECT查询,但我无法获得结果
可能是因为前面有3个查询,所以它给出了一个错误。我如何得到结果
我的PHP代码是:
$test_result = mysqli_multi_query($link, $multi_test_query);
$count = mysqli_fetch_assoc($test_result);
print_r($count);
发出的警告是:
mysqli_fetch_assoc期望参数1为mysqli_结果,给定布尔值
此代码给出2个错误:
$test_result = mysqli_multi_query($link, $multi_test_query);
$count = mysqli_fetch_assoc($test_result);
echo mysqli_error();
print_r($count);
警告:mysqli_fetch_assoc希望参数1是mysqli_结果,布尔值在第123行的C:\Program Files x86\EasyPHP-12.1\www\App\php\post\excel_yukle.php中给出
警告:mysqli_错误只需要1个参数,0在C:\Program Files x86\EasyPHP-12.1\www\App\php\post\excel_yukle.php的第124行中给出
编辑:我试过这个:
/* execute multi query */
if (mysqli_multi_query($link, $multi_test_query)) {
do {
/* store first result set */
if ($result = mysqli_store_result($link)) {
while ($row = mysqli_fetch_row($result)) {
printf("%s\n", $row[0]);
}
mysqli_free_result($result);
}
/* print divider */
if (mysqli_more_results($link)) {
printf("-----------------\n");
}
} while (mysqli_next_result($link));
}
结果是:
-----------------
-----------------
-----------------
46
<br />
<b>Strict Standards</b>: mysqli_next_result(): There is no next result set. Please, call mysqli_more_results()/mysqli::more_results() to check whether to call this function/method in <b>C:\Program Files (x86)\EasyPHP-12.1\www\HCAWebApp\php\post\excel_yukle.php</b> on line <b>136</b><br />
我已经解决了
$i = 1;
if (mysqli_multi_query($link, $multi_test_query)) {
while(mysqli_next_result($link)) {
/* store first result set */
if ($result = mysqli_store_result($link)) {
while ($row = mysqli_fetch_row($result)) {
//printf("%s\n", $row[0]);
if($i==3) $satirsayisi = $row[0];
}
mysqli_free_result($result);
}
/* print divider */
if (mysqli_more_results($link)) {
//printf("-----------------\n");
}
$i = $i + 1;
if($i>3) break;
}
}
echo $satirsayisi;
第一次编码时出现的错误是因为您将mysqli_multi_查询的布尔结果存储为$test_result,然后尝试将$test_result馈送到mysqli_fetch_assoc。您打算将查询结果发送到fetching函数,但这不是使用multi_查询时的操作方式-这与如何执行是一种可以理解的混淆mysqli_查询工作正常 这里有一句重要的话: 要从第一个查询检索结果集,可以使用mysqli\u use\u result或mysqli\u store\u result。所有后续查询结果都可以使用mysqli\u more\u结果和mysqli\u next\u结果进行处理 …此引用还涉及到您第二次发布尝试的问题,该尝试仅检查mysqli_next_result$链接。明确遵守本手册的说明意味着在以下情况下编写:
} while(mysqli_more_results($link) && mysqli_next_result($link));
OP提供/选择的答案是无法找到解决方案的变通方法。这整个$i业务应该被删除;你在任何一家公司都看不到这种类型的工作
在您正在运行的查询中,只有一个应该有记录集
CREATE TEMPORARY TABLE //returns true/false. *structural, no rows in this case.
INSERT //returns true/false. *mysqli_affected_rows if desired.
UPDATE //returns true/false. *mysqli_affected_rows if desired.
SELECT //returns record set. *max of 1 row in this case.
我建议的解决办法是:
if (mysqli_multi_query($link, $multi_test_query)) {
do {
if ($result = mysqli_store_result($link)) { // record set was generated for this query
$satirsayisi = mysqli_fetch_row($result)[0];
mysqli_free_result($result);
}
} while (mysqli_more_results($link) && mysqli_next_result($link));
}
if ($hata = mysqli_error($link)) {
echo "Error / hata: $hata"; // don't display error messages when site is public
} else {
echo "Number of lines / satır sayısı: $satirsayisi";
}
如果有任何错误,将回显$hata
如果您的SELECT查询成功,$satirsaysi将是您的计数值,并返回到屏幕
其他建议/要点:
从单值结果取数:使用mysqli_fetch_行[0]在一行中完成作业;不需要while循环
循环mysqli_multi_查询:参考文档使用DO WHILE循环,以便在第一次迭代时始终输入循环,并在每次迭代结束时检查条件语句
如果任何查询有任何错误,mysqli\u multi\u query将停止执行后续查询-这就是函数的设计行为。噢,没有错误。我做到了。因为这个查询没有问题。查询是有效的。但是我不能得到结果。