2016-07-31 6 views
0

내 가게를위한 페이지를 만들었지 만 get_result를 사용하고 있었고 모든 작업을 마친 후에 HostGator에서 mysqlnd를 실행하지 못하게했습니다. 그래서 나는 bind_result로 모든 것을 변환해야했지만 여기서 모든 것을 바꿔야한다는 것을 좌절감으로 여기에서 막 다른 골목에있다.bind_result로 둘 이상의 mysql 항목을 반환합니다.

어쨌든 내 문제는 내가 테이블을 읽으려는 쿼리를 호출한다는 것이다. 결과를 반환 한 후 코드가 중지됩니다. 예를 들어,이 코드에서는 데이터베이스에 5 개의 약속이 있지만 첫 번째 약속 만 반환 했음에도 약속 목록을 요청합니다. 그것은 여러 테이블에서 읽히고 읽히지 만 1 루프에서 멈추는 것처럼 작동합니다. $ listappointments_stmt-> free_result();를 수행하지 않으면 두 번째 테이블을 계속 읽지 않습니다. 먼저 다음 쿼리 전에 내 문제가 있다고 생각하지만 거기에 그것을 가지고 있지 않으면 부울 오류가 발생하는 것처럼 그것을 arround 작동하는 방법을 몰라. 어떤 아이디어라도 환영합니다!

당신은 SQL에서 JOIN 문을 사용하는 방법을 배우게하는 것이 현명 수 있습니다, 사전에 Xenos K.

<?php 
       $query="SELECT * FROM appointments"; 
       $listappointments_stmt=$mysqli->prepare($query); 
       $listappointments_stmt->execute(); 
       $listappointments_stmt->bind_result($AppId, $AppDate, $AppTime, $AppType, $AppArtist, $AppTitle, $AppClient, $AppPrice, $AppNotes); 
       while ($listappointments_stmt->fetch()) 
       { 
       $theDate=date("d-M-Y", strtotime($AppDate)); 
       echo "<tr><td>".$theDate."</td>"; 
       echo "<td>".$AppTime."</td>"; 
       $listappointments_stmt->free_result(); 
       $tempappointmentType=$AppType; 
       $query2="SELECT * FROM appointmenttypes WHERE ID=?"; 
       $listappointmentsTypes_stmt=$mysqli->prepare($query2); 
       $listappointmentsTypes_stmt->bind_param("s", $tempappointmentType); 
       $listappointmentsTypes_stmt->execute(); 
       $listappointmentsTypes_stmt->bind_result($AppTypeId, $AppTypeName, $AppTypeColor); 
       while ($listappointmentsTypes_stmt->fetch()) 
       { 
       echo "<td><span class=\"label\" style=\"background-color:".$AppTypeColor."\">".$AppTypeName."</span></td>"; 
       } 
       $listappointmentsTypes_stmt->free_result(); 
       $listappointmentsTypes_stmt->close(); 
       $tempappointmentArtist=$AppArtist; 
       $query3="SELECT * FROM staff WHERE ID=?"; 
       $listappointmentsArtist_stmt=$mysqli->prepare($query3); 
       $listappointmentsArtist_stmt->bind_param("s", $tempappointmentArtist); 
       $listappointmentsArtist_stmt->execute(); 
       $listappointmentsArtist_stmt->bind_result($ArtId, $ArtName, $ArtNickName, $ArtSurname, $ArtPhone, $ArtBirthDate, $ArtIdentificationNumber, $ArtStreetName, $ArtStreetNumber, $ArtPostalCode, $ArtCity, $ArtCountry, $ArtPosition, $ArtEmail, $ArtFacebook, $ArtInstagram); 
       while ($listappointmentsArtist_stmt->fetch()) 
       { 
       echo "<td>".$ArtName." ".$ArtNickName." ".$ArtSurname."</td>"; 
       } 
       $listappointmentsArtist_stmt->free_result(); 
       $listappointmentsArtist_stmt->close(); 
       echo "<td>".$AppTitle."</td>"; 
       $tempappointmentClient=$AppClient; 
       $query4="SELECT * FROM clients WHERE ID=?"; 
       $listappointmentsClient_stmt=$mysqli->prepare($query4); 
       $listappointmentsClient_stmt->bind_param("s", $tempappointmentClient); 
       $listappointmentsClient_stmt->execute(); 
       $listappointmentsClient_stmt->bind_result($CliId, $CliName, $CliSurname, $CliPhone, $CliBirthDate, $CliIdentificationNumber, $CliStreetName, $CliStreetNumber, $CliPostalCode, $CliCity, $CliCountry, $CliFathersFullName, $CliMothersFullName, $CliEmail, $CliFacebook, $CliInstagram, $CliNotes); 
       while ($listappointmentsClient_stmt->fetch()) 
       { 
       echo "<td>".$CliName." ".$CliSurname."</td>"; 
       echo "<td>".$CliPhone."</td>"; 
       } 
       $listappointmentsClient_stmt->free_result(); 
       $listappointmentsClient_stmt->close(); 
       echo "<td>".$AppPrice."</td>"; 
       echo "<td><a href=\"appointmentsedit.php?appointmentStatus=view&appointmentId=".$AppId."\" title=\"".$lang['view']."\"><i class=\"text-green fa fa-eye\"></i></a></td>"; 
       echo "<td><a href=\"appointmentsedit.php?appointmentStatus=edit&appointmentId=".$AppId."\" title=\"".$lang['edit']."\"><i class=\"text-blue fa fa-edit\"></i></a></td>"; 
       echo "<td><a href=\"appointmentsedit.php?appointmentStatus=delete&appointmentId=".$AppId."\" title=\"".$lang['delete']."\"><i class=\"text-red fa fa-trash-o\"></i></a></td></tr>"; 
       } 
       $listappointments_stmt->close(); 
       ?> 

답변

1

을 주셔서 감사합니다. 이렇게하면 단 하나의 SQL 쿼리를 사용하여 필요한 모든 결과를 가져올 수 있습니다.

그동안 다른 SQL 쿼리를 중첩하는 경우 외부 쿼리 (귀하의 경우 SELECT * FROM appointments)는 나머지 쿼리와는 별도의 데이터베이스 연결 (경우에 따라 $mysqli)이 필요합니다. 연결에서 새 쿼리를 실행하면 나머지 쿼리가 다시 설정됩니다.

프로 팁 : 프로덕션 소프트웨어에서 SELECT *을 사용하지 마십시오. 대신 필요한 열의 목록을 제공하십시오. 그렇게하면 소프트웨어가 더 강력하고 이해하기 쉬워집니다.

+0

정보 주셔서 감사합니다. 추가 연결을 만들고 free_result를 움직이면 트릭을 만들었습니다. 최종 제품에 Select *를 변경하고 언급 한대로 JOIN으로 들어갑니다. 다시 감사합니다! –