2012-10-18 6 views
0

표시하고 싶습니다. 이전에 두 개의 쿼리가 필요합니다. 그리고 새로운 Mysqli 인터페이스로이 작업을하려고 할 때 올바른 방법으로 작동하지 않습니다.여러 MYSQLI 사용 준비 및 가져 오기

나는이 있고, 출력은 다음과 같습니다 경고 : mysqli가 :: [mysqli.prepare]) (준비 : 새로운 문을 준비하기 전에 모든 데이터를 가져올 수 있어야는

$qryRdmPh="SELECT `id` FROM `table` ORDER BY RAND() LIMIT 0,30"; 
$stmtRdmPh = $mysqli->prepare($qryRdmPh); 
$stmtRdmPh->execute(); 
$stmtRdmPh->bind_result($id); 
while($stmtRdmPh->fetch()) { 
//Obtener el atributo Frase 
$qryPhVal="SELECT `id_v` FROM `values` WHERE `id_p`='" . $id . "'"; 
$stmtPhVal = $mysqli->prepare($qryPhVal); 
$stmtPhVal->execute(); 
$stmtPhVal->bind_result($idV); 
    while($stmtPhVal->fetch()){ 
    echo $idV; 
    } 
} 

가해야 장소를 소요 복잡한 규칙없이 결과를 표시하는 또 다른 방법이 될 것입니다 ... 필자는 Statement 쿼리를 사용하는 것이 매우 중요하다고 읽었지만 그 이유는 무엇입니까? 그것은 내 코드를 훨씬 더 길고 복잡하게 만든다.

편집 : 내게 진술이 중요하고 항상 사용해야하는지 누군가가 설명하면 정말 고맙습니다.

+1

내부 쿼리가 외부 쿼리의 결과를 기반으로 물건을 가져 오는 중첩 쿼리를 수행 할 때마다 [SQL join] (http://en.wikipedia.org/wiki/Join_)을 사용해야합니다. % 28SQL % 29) –

+0

@MarcB이 경우, 프리스트 쿼리가 반환 한 각 단일 ID에 대한 결과 집합이 필요합니다. 나는 거기에 어떤 연줄이라도 할 수 있다고 생각하지 않는다. – Kenedy

+1

그래서? 두 개의 중첩 된 쿼리가 수행 할 수있는 모든 작업은 조인 된 쿼리가 더 잘 수행 할 수 있습니다. '테이블에서 ID를 선택하려면 values.id_p = table.id에 대한 조인 값을 rand() limit 0,30' 순서로 선택하십시오. –

답변

0

이런 식으로 중첩 쿼리없이 항상 동일한 작업을 수행 할 수있는 이 있습니다. 그리고 더 많은 것은 ... 이런 식으로하면 DB에 해를 끼칠 수 있습니다. 항상 더 쉬운 방법을 찾으십시오.

예 : : 현재 쿼리에 의존하는 쿼리를 수행하려면 버퍼를 만들고 버퍼링 후 모든 행을 삽입하는 것이 좋습니다.

관련 문제