2013-05-23 2 views
-1

나는 준비된 문에 익숙해졌습니다. 결과를 쉽게 묶을 수있는 루프가있는 쿼리가 작동합니다.준비된 문 - 다중 쿼리

지금, 나는 다른 쿼리를 추가하고 싶습니다와 나는 세 가지 위치 중 어느 것이 가장 좋은 장소/가장 좋은 방법입니다 확실하지 않다 올바른 구문

/* Create a new mysqli object with database connection parameters */ 
$mysqli = new mysqli($hostname_db, $username_db, $password_db, $database_db); 
if(mysqli_connect_errno()) { 
    echo "Connection Failed: " . mysqli_connect_errno(); 
    exit(); 
} 

/* Create a prepared statement */ 
if($stmt = $mysqli -> prepare("SELECT * FROM table WHERE id = ?")) { 

    /* Bind parameters, s - string, b - blob, i - int, etc */ 
    $stmt -> bind_param("i", $rid); 
    $stmt -> execute(); 

    /* USE loop to bind result and fetch */ 
    $meta = $stmt->result_metadata(); 
    while ($field = $meta->fetch_field()) {$parameters[] = &$row[$field->name];} 
    call_user_func_array(array($stmt, 'bind_result'), $parameters); 
    while ($stmt->fetch()) { 
     foreach($row as $key => $val) { $x[$key] = $val; 
     } 
     $results[] = $x; 
    } 
    /* Close statement */ 
    $stmt -> close(); 

------------------>SHOULD I PUT ANOTHER QUERY HERE? 


    } 

------------------>OR SHOULD I PUT ANOTHER QUERY HERE INSTEAD? 

    /* Close connection */ 
    $mysqli -> close(); 

----------------->Or, should I put it here 

//END mysqli query method 

의 확실하지 않다. 나는 그것을 시행 착오와 함께 끝낼 수 있었지만 나는 무엇이 최선의 관행인지 알고 싶었고 명확한 대답을 찾을 수없는 것처럼 보였다.

미리 감사드립니다.

+0

두 번째 장소입니다. – eggyal

+0

고마워요 @eggyal, 그 일했습니다. 질문에 답할 수 있도록 답변을 표시 할 수 있습니까? – Kevin

답변

0

진술을 하나씩 넣으십시오. mysqli 준비된 문을 사용하지 않는, close()를 사용하지 마십시오, 200를 수집하지 않습니다

$stmt = $pdo -> prepare("SELECT * FROM table WHERE id = ?"); 
$stmt -> execute(array($rid)); 
$results = $stmt -> fetchAll(); // for many rows 

$stmt = $pdo -> prepare("SELECT id FROM table WHERE name = ?"); 
$stmt -> execute(array($name)); 
$id = $stmt -> fetchColumn(); // for single scalar value 

$stmt = $pdo -> prepare("SELECT * FROM table WHERE id = ? LIMIT 1"); 
$stmt -> execute(array($rid)); 
$row = $stmt -> fetch(); // for single row 

even more intelligent library

또는,에, 여전히도

// one single line to get your $results instead of screenful of code, mind you 
$results = $db->getAll("SELECT * FROM table WHERE id = ?i",$rid); 
// as well as others 
$id  = $db->getOne("SELECT id FROM table WHERE name = ?s", $name); 
$row  = $db->getRow("SELECT * FROM table WHERE id = ?i LIMIT 1",$rid) 

수를 원시 mysqli을 고수하고 싶습니까?

+0

하. @ YourCommonSense, 천천히 나를 데려오고 있습니다. 당신이 [내 질문에] 대답 (http://stackoverflow.com/questions/16557785/sql-injection-prevention-get-vars) 그래서 나는 준비된 문장을 배우고 구현하려고 노력하고 있지만 mysqli가 방법이라고 생각했다. 가다. 나는 당신이 강력하게 pdo 대 mysqli를 추천하고있는 것을 보았다. 기본적으로 더 깨끗하고 간단하기 때문입니까? – Kevin

+0

Saner 나는 말할 것이다. 어떤 이유로 mysqli는 매우 기본적인 것들을 매우 복잡하게 만든다. 그러나 어지러운 코드를 모두 캡슐화하는 클래스를 만들면 약간의 노력으로 효과를 낼 수 있습니다.하지만 PDO는 확실히 사용할 수있는 방법입니다. –

+0

저는 하루 종일 mysqli를 배운 후 PDO를 읽고 있습니다. mysqli에서 'bind_parameter'를 사용할 때 integer에 "i"를 붙일 수있다. PDO는 이와 비슷한 설정을 가지고 있지 않습니까? – Kevin