mysqli 다중 쿼리 - 세트 변수는 부울 오류를 생성/이것을 건너 뛰는 방법은 무엇입니까?
-
22-07-2019 - |
문제
Phpmyadmin을 통해 잘 작동하는 다음 간단한 쿼리를 얻었지만 PHP 웹 사이트에 추가하면 결과가 반환되지 않으며 오류/경고 메시지도 없습니다. "set @n = -1;"를 제거하면 그런 다음 잘 작동합니다.
<?php
$db_connect = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD, true);
mysql_select_db(DB_NAME, $db_connect);
$test_query = mysql_query("SET @N=-1;SELECT `id`, (@N:=@N+1) AS `mycount` FROM `mydb`;");
for ($i = 0; $i <= mysql_num_rows($test_query)-1; $i++) {
echo mysql_result($db_directorymap, $i, 0) . " " . mysql_result($db_directorymap, $i, 1) . "<br />";
}
?>
업데이트 : 방금 MySQLI로 이사했지만 물론 MySQL 문과 MySQLI_Multi_Query에 여전히 문제가 있습니다. 쿼리의 첫 번째 부분을 실행하면 반환 된 결과가 비어 있으므로 부울 오류가 주어집니다. 첫 번째 결과 세트를 건너 뛰어야한다고 생각하지만 어떻게 해야할지 모르겠습니까?
해결책
그 때문입니다 mysql_query
함수는 하나의 쿼리 만 허용하지만 세미콜론으로 분리 된 두 개를주었습니다. 중 하나를 시도하십시오 :
각 쿼리를 개별적으로 실행합니다 (이것이 작동하는지 모르겠습니다) :
mysql_query( "SET @N=-1" ); mysql_query( "SELECT `id`, (@N:=@N+1) AS `mycount` FROM `mydb`" );
사용 mysqli 이랑 multi_query 기능 (또는 a pdo 하나가있는 경우 동등합니다).
업데이트 된 질문에 답하려면 : Multi_Query의 PHP 설명서 페이지를 확인하십시오. 나는 당신이 사용하고 싶다고 생각합니다 mysqli::next_result
. 절차 적 스타일을 사용하여 이와 같은 것 :
mysqli_multi_query($link, $query);
mysqli_next_result($link);
if ($result = mysqli_store_result($link)) {
while ($row = mysqli_fetch_row($result)) {
printf("%s\n", $row[0]);
}
mysqli_free_result($result);
}
다른 팁
MySQL_Query를 통한 여러 쿼리는 지원되지 않으므로 후속 SELECT 명령이 아닌 SET 명령 만 실행하고 있다고 생각합니다.
제휴하지 않습니다 StackOverflow