2012-09-05 59 views
0

我有一個代碼,創建mysqli的對象和準備查詢:如何獲得所有的值進行預處理語句查詢結果

$GLOBALS['DB_something'] = new mysqli('$database_hostname','$database_username','$database_password','$database_default'); 
    $GLOBALS['DB_prepared_get'] = $GLOBALS['DB_something']->prepare("SELECT ? from database_name WHERE hash=?"); 

和下一個代碼,獲取和顯示結果。由於我最近沒有進入準備好的陳述,特別是不使用PHP,我不知道如何從中獲得結果。
當我編寫沒有預處理語句的代碼時,它可以工作,但出於很多原因,我需要用預處理語句重寫它。

$GLOBALS['DB_prepared_get']->bind_param('ss', $arg, $index); 
$GLOBALS['DB_prepared_get']->execute(); 
$GLOBALS['DB_prepared_get']->bind_result($result); # this is an array of values 

$GLOBALS['DB_prepared_get']->fetch();  
      # below this, I don't know if it's ok    
      if(mysql_num_rows($result) == 0){ 
       return "0"; 
      } 

      else{ 
       while($GLOBALS['DB_prepared_get']->fetch()) { 
        return $result; 
       } 
      } 

      $GLOBALS['DB_prepared_get']->close(); 

感謝您的任何幫助。

編輯:只是要清楚,我的問題是如何獲取確切的結果值打印出來或什麼。所以語法是我可能做錯了。

+0

什麼是選擇,在準備好的聲明不會爲第一部作品?參數如果我沒有弄錯,你必須明確地寫出 – FabioCosta

+0

準備好聲明的意義何在? :( – trainoasis

+0

安全有時性能,你會改變的是像SELECT * FROM table WHERE id =?這樣的值,並且在準備好的語句中使用帶有直接列的倍數Ids – FabioCosta

回答

0

據我所知,你不能指定查詢的列作爲參數。您將不得不直接在準備的語句字符串中編寫列。

喜歡的東西

$GLOBALS['DB_prepared_get'] = $GLOBALS['DB_something']->prepare("SELECT a,b,c from database_name WHERE hash=?"); 
+0

,我的「準備好的語句」沒有用 – trainoasis

+0

好吧,準備語句的思想是驗證和清理輸入參數(除其他外),它對於 – Erik

+0

非常有用,最重要的是查詢只准備一次,稍後只有參數是這就是爲什麼我需要更改SELECT X這個X與bindParam後 – trainoasis

0

有在你的代碼這麼多缺點,我也不試圖解釋什麼不妥的地方。但是我可以說,如果你沒有面向對象編程的經驗,你應該首先嚐試用mysqli編寫程序代碼。

此代碼應工作:

$mysqli = new mysqli($database_hostname, $database_username, $database_password, $database_default); 
    if ($mysqli->connect_error) { 
    die('Connect Error (' . $mysqli->connect_errno . ') ' . $mysqli->connect_error); 

    if ($stmt = $mysqli->prepare("SELECT ? from database_name WHERE hash=?")) { 
    $stmt->bind_param("s", $fieldname); // first marker 
    $stmt->bind_param("s", $hashwhere); // second marker 

    $stmt->execute(); 

    $result = array(); 
    while ($stmt->fetch()) { 
     $result[] = array($fieldname); 
    } 

    $stmt->close(); 
    } 

    $mysqli->close(); 

    var_dump($result); 
+0

這不起作用,但我是美國$ GLOBALS投入$ stmt,因爲這是我的情況,不能做到這一點沒有使用它。 – trainoasis

相關問題