2012-10-08 2 views
1

mysqli 함수 (mysqli_connect, mysqli_select_db, mysqli_query)을 사용하여 1 개의 선택 쿼리와 2 개의 저장 프로 시저를 호출합니다.

<?php 
$server="localhost"; 
$user="user"; 
$pass="pass"; 
$db="db"; 

$connection=mysqli_connect("$server","$user","$pass"); 
mysqli_select_db($connection, "$db") or die('Unable to select database.'); 

//First SELECT using $connection 
$query=mysqli_query($connection, "SELECT item_name FROM items ORDER BY item_name DESC");  

While ($result=mysqli_fetch_array($query,MYSQL_NUM)) 
{ 
    $complete_result[] = $result[0]; 
    $total_rows = $total_rows + 1; 
} 

//CALL to first sp using $connection 
$query2 = mysqli_query($connection, "CALL sp_check_edits_remaining()"); 

while ($row2 = mysqli_fetch_array($query2, MYSQL_ASSOC)) { 
    $edits_remaining = $row2['edits_remaining']; 
} // End while 

//CALL to second sp using $connection 
$query3 = mysqli_query($connection, "CALL sp_edit_data"); 

while ($row3 = mysqli_fetch_array($query3, MYSQL_ASSOC)) {); 
    $edits_id = $row3['id']; 
} // End while 

?> 

내가 설명처럼 : 아래

"Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in..." 내 코드입니다 :

내가 (mysqli_connect에 의해 반환) 같은 $connection 여러 번 사용하고 때, 나는 다음과 같은 오류 메시지가 무엇입니까 것 같다 , 내가 두 번째 sp를 호출 할 때, 위의 코드는 나에게 위에서 언급 한 에러 메시지를 준다. (연결이 끊어지지 않습니다.)

그러나 다른 연결을 만들어 두 번째 sp 통화에 제공하면이 오류가 사라집니다. 아래 코드에 표시됩니다.

$connection2=mysqli_connect("$server","$user","$pass"); 
mysqli_select_db($connection2, "$db") or die('Unable to select database.'); 

//CALL to second sp using $connection 
$query3 = mysqli_query($connection2, "CALL sp_edit_data"); 

while ($row3 = mysqli_fetch_array($query3, MYSQL_ASSOC)) { 
    $edits_id = $row3['id']; 
} // End while 

아무도 도와 주실 수 없습니까? 미리 감사드립니다.

답변

2

내 시나리오와 관련된 해결책을 찾은 것으로 보입니다.

내 저장된 procs는 결과 집합에서 한 행만 반환합니다.

그래서, 최초의 SP에 CALL과 루프 동안, 나는 단순히 추가 한 대응 후 : 이것은 수신 된 오류 메시지/경고를 제거했습니다

mysqli_next_result($connection); 

.

누구나 '전문적인'접근 방식인지 여부를 말씀 하시겠습니까?

+0

좋습니다. 감사... – Sayka

1

mysql 함수 중 하나 (아마도 쿼리 호출)가 부울 false를 반환하는 오류가 발생하여 가져 오기 호출에서 맹목적으로 사용합니다. 추가 오류 처리를 추가해야합니다 (예 :

$query = mysqli_query($connection, "...") or die(mysqli_error($connection));  

쿼리가 성공했다고 절대 가정하지 마십시오.

+0

안녕하세요. 회신 해 주셔서 감사합니다. 하지만 내가 말한 것처럼 두 번째 $ 연결 (위의 예에서 $ connection2라고 함)을 제공하면이 오류가 사라집니다. 그래서, 무엇이 잘못 될 수 있습니까? 그건 그렇고, 나는 또한 간단한 SELECT * FROM 등으로 전화를 변경했지만 여전히 동일한 동작. –

+0

아마도 당신은 unbuffered 모드에서 열어 놓은 쿼리를 가지고있을 것입니다. mysqli은 기본적으로 - 첫 번째 쿼리가 여전히 열려있는 동안 두 번째 쿼리를 실행하면 오류가 발생하고 오류 처리는하지 않습니다. 두 번째 연결을 열면 오류가 무시됩니다. –

+0

sp가 단일 행만 반환하면 위의 설명에서 설명한 문제가 계속 발생할 수 있다고 생각합니까? 또한, 나는'code' mysqli_store_result ($ connection)을 추가했다; 그러나 여전히 변화가 없습니다. –

0

다음에 쿼리가 끝나면 $connection을 닫은 다음 다른 쿼리를 연결하고 $connection을 다시 연결하고 지정해야합니다.

mysqli_close($connection); 

$connection=mysqli_connect(bla,bla,bla,bla). 
관련 문제