2016-03-08 76 views
0

我試圖在php上做一個選擇,但是我在將綁定參數傳遞給標準的sql語句時遇到了問題。我已經失去了我的一整天,我找不到任何解決方案。我有一個SQL語句和參數(這部分是不斷變化的)在SQL語句上的php綁定參數不起作用

在這裏,我有我的SQL語句並執行:

$mysqli=getDB(); 
    $stmt = $mysqli->prepare('SELECT nom from noms where id=?'); // cambiar select 
    $sql->bind_param($id); 
    $result = $mysqli->query($sql); 
    $results = array(); 
    while($row = mysqli_fetch_array($result)){ 
     $results[] = array(// modificar el que passa dintre del bucle 
      'nom' => $row['nom'] 
     ); 
    } 

    echo json_encode($results); 

這裏是我如何與數據庫連接(getDB()):

function getDB() { 
    // Credencials 
    $servername = "server"; 
    $username = "user"; 
    $password = "pswwd"; 
    $dbname = "database"; 


    $mysqli = new mysqli($servername, $username, $password, $dbname); 
    if ($mysqli->connect_errno) { 
     echo "Error al connectar: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error; 
    } 

    return $mysqli; 

} 

所有這些實際上是一個Web服務功能,當我打電話給它時,我收到一條500消息錯誤。我需要運行更改$ id值的語句(該參數來自外部)。我只收到來自JS控制檯的500錯誤狀態,但我沒有看到任何錯誤消息。

編輯:

我做了發言,並執行一些改動:

$mysqli=getDB(); 
     $stmt = $mysqli->prepare('SELECT nom from noms where id=?'); // cambiar select 
     $stmt ->bind_param($id); 
     $result = $mysqli->query($stmt); 
     $results = array(); 
     while($row = mysqli_fetch_array($result)){ 
      $results[] = array(// modificar el que passa dintre del bucle 
       'nom' => $row['nom'] 
      ); 
     } 

     echo json_encode($results); 

仍表現出相同的信息日誌: PHP致命錯誤:調用一個成員函數bind_param()非對象上

回答

1

RTM:http://php.net/manual/en/mysqli-stmt.bind-param.php

語法是

$stmt->bind_param('types', $var1, $var2, etc....) 

您只提供了$var1部分,並忘記了類型。你需要告訴mysqli你的參數是什麼類型,例如

$stmt->bind_param('i', $id); 
        ^^^---missing in your version 

而且請注意,只要你得到一個500,你立即去看看你的web服務器的錯誤日誌的實際細節。您在瀏覽器中看到的內容是故意模糊的,因爲500個錯誤可能會揭示核心/配置細節,這些細節永遠不會公開。

+0

不工作,但我會檢查日誌的第一個。謝謝! – proktovief

+0

我收到以下消息:PHP致命錯誤:調用非對象上的成員函數bind_param()。那麼,我沒有適當地使用bind_param()? – proktovief

+0

這意味着您的預備呼叫失敗。例如您需要調試備份呼叫鏈。 –