2014-01-05 39 views
0

我正在使用MySQLi連接,並且我有下面的代碼,我試圖從數據庫表中定義庫存ID所定義的行的所有列,但是我無法得到這個工作。我是否完全錯誤的方式?我希望能夠在選擇查詢之後的代碼中使用$row['general_cleanliness']之類的內容。mysqli的問題全部選中

$getScheduleCondition = $db->prepare("SELECT * FROM inventories WHERE inventory_id = ? LIMIT 1",)){ 
$getScheduleCondition->bind_param("i", $inventory); 
$row = $getScheduleCondition->fetch_array(); 
$getScheduleCondition->close(); 

$inventory被定義爲一個數字,我知道這工作。任何幫助表示讚賞,對不起,如果這似乎是一個基本問題,只是有點混亂!

編輯: 給大家告訴我,我使用的PDO,我不是:

$db = new mysqli('localhost', 'cl52-system', 'PASS', 'cl52-system'); 
if($db->connect_errno > 0){ 
    die('Unable to connect to database [' . $db->connect_error . ']'); 
} 
+0

「選擇數據庫中的所有行」 - 但爲什麼在你的代碼中,你通過id選擇並設置限制1? – sergio

+0

你永遠不會執行查詢(http://www.php.net/manual/en/mysqli-stmt.execute.php) – Sumurai8

+0

@sergio對不起,我的意思是專欄! –

回答

0

你忘了兩件事。首先你需要執行查詢。您可以使用your_stmt_object->execute()docs)執行此操作。雖然您的stmt對象沒有方法fetch_array(),但您首先需要使用->get_result()docs)將mysqli_result拉出來,然後可以根據需要使用fetch_array()

$getScheduleCondition = $db->prepare("SELECT * FROM inventories WHERE inventory_id = ? LIMIT 1"); 
$getScheduleCondition->bind_param("i", $inventory); 
$getScheduleCondition->execute(); //You need to execute the query 
$row = $getScheduleCondition->get_result()->fetch_array(); //From stmt to mysql_result to array 
$getScheduleCondition->close(); 

如果您不需要使用數組,它可能更容易->fetch()docs)和->bind_result()docs),而不是使用。

$getScheduleCondition = $db->prepare("SELECT * FROM inventories WHERE inventory_id = ? LIMIT 1"); 
$getScheduleCondition->bind_param("i", $inventory); 
$getScheduleCondition->bind_result($column1, $column2, $column3, $etc); 
$getScheduleCondition->execute(); //You need to execute the query 
$getScheduleCondition->fetch(); //Now the first row is in the variables defined above 
echo $column1; //<-- see? 
$getScheduleCondition->close(); 
+0

我的舊查詢使用了bind_result。可能有很多列,我想用select *來簡化它。我會嘗試你的第一個建議 –

+0

我試過第一個選項,現在它只是殺死我的腳本。有任何想法嗎? –

+0

起訴謀殺。另外找出它給出了什麼錯誤。如果它沒有給出可見的錯誤(並且你有PHP錯誤),'var_dump'包含所有變量,看看是否有一個或多個給出奇怪的結果。如果第一行提供了一個錯誤(準備語句),請手動對數據庫執行查詢以查看是否有任何mysql錯誤。或者,如果您在那個時刻之前完成了準備好的查詢,那麼該查詢可能沒有被正確關閉。 – Sumurai8

-2

你的傳球被確定爲參數「I」(命名參數),但在你的查詢只?,將您的bind_param改爲「:i」並更改?到:我在你的查詢。

$getScheduleCondition = $db->prepare("SELECT * FROM inventories WHERE inventory_id = :i LIMIT 1",)){ 
    $getScheduleCondition->bind_param(":i", $inventory, PDO::PARAM_INT); 
    $getScheduleCondition->execute(); // based on Sumurai8 comment, this is missing 
    $row = $getScheduleCondition->fetch_array(); 
    $getScheduleCondition->close(); 

另外,PDO:PARAM_INT明確地將該參數設置爲整​​數。

+0

連接工作正常,因爲我曾經使用的罰款,我試圖簡化我的代碼,我不相信這是答案,但我會嘗試它 –

+0

它被設置爲一個整數,即時通訊使用mysqli –

+0

Updated問題,我正在使用mysqli –