2012-07-05 88 views
8

可能重複:
PHP: Warning: sort() expects parameter 1 to be array, resource givenmysqli_fetch_assoc()預計參數1被mysqli_result,布爾給

我非常新的PHP和MySQL,我只是不明白這一個出。我在論壇中搜索了所有內容,但沒有找到我能夠理解的答案。我最初使用的是mysql_fetch_assoc(),但是我只能搜索數字,並且在搜索字母時也收到了錯誤。我希望我在這裏走上正軌。預先感謝您的幫助!

$con = mysqli_connect($hostname,$username,$password) or die ("<script language='javascript'>alert('Unable to connect to database')</script>"); 
mysqli_select_db($con, $dbname); 

if (isset($_GET['part'])){ 
    $partid = $_GET['part']; 
    $sql = 'SELECT * 
     FROM $usertable 
     WHERE PartNumber = $partid'; 

    $result = mysqli_query($con, $sql); 
    $row = mysqli_fetch_assoc($result); 

    $partnumber = $partid; 
    $nsn = $row["NSN"]; 
    $description = $row["Description"]; 
    $quantity = $row["Quantity"]; 
    $condition = $row["Conditio"]; 
} 
+2

不要忘記過濾'$ _GET ['part']'以防止SQL注入。 – honyovk 2012-07-05 15:51:57

回答

17

當您的結果不是結果(而是「false」)時會發生這種情況。 你應該改變這一行

$sql = 'SELECT * FROM $usertable WHERE PartNumber = $partid'; 

這樣:

$sql = "SELECT * FROM $usertable WHERE PartNumber = $partid"; 

因爲「可以在」不能interprete $變量

正常工作與整數(數字),字符串需要。把$變量放在單引號中,就像

$sql = "SELECT * FROM $usertable WHERE PartNumber = '$partid' "; 

如果你想/有單引號工作,那麼PHP可以不interprete的變量,你將不得不做這樣的:

$sql = 'SELECT * FROM '.$usertable.' WHERE string_column = "'.$string.'" AND integer_column = '.$number.'; 
+0

這是因爲字符串需要像上面那樣轉義。我剛剛改進了我的答案。 – Sliq 2012-07-05 16:21:18

+0

非常感謝你,這個伎倆!我非常感謝大家的幫助! – user1504463 2012-07-05 16:50:34

+0

「當你的結果不是結果時,會發生這種情況(而是一個」假「)。」 這真的幫助我在幾秒鐘內完成調試。 – madhuspot 2016-12-28 23:55:44

4

您是單引號您的SQL語句,它使變量文本,而不是變量。

$sql = "SELECT * 
    FROM $usertable 
    WHERE PartNumber = $partid"; 
11
mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given 

這意味着,你傳遞的第一個參數是一個布爾值(真或假)。

第一個參數是$result,它是false,因爲查詢中存在語法錯誤。

" ... WHERE PartNumber = $partid';" 

您不應該直接在SQL查詢中包含請求變量,否則用戶可以在查詢中注入SQL。 (見SQL injection。)

你應該逃脫變量:

" ... WHERE PartNumber = '" . mysqli_escape_string($conn,$partid) . "';" 

或者更好的,用Prepared Statements

+0

http://www.macaerospace.info/inventory/test?part=1當它只是搜索一個數字時工作正常| http://www.macaerospace.info/inventory/test?part=PN123不起作用,並給我布爾錯誤| 另外,插入轉義字符串時,我收到了T-VARIABLE錯誤。現在安全對我來說不是一個大問題,因爲我只是試圖讓它首先工作 – user1504463 2012-07-05 16:39:58

0

如果$usertable不是有效表格或不包含列PartNumber或part不是數字,代碼中會發生什麼情況。

你必須逃離$ PARTID並閱讀該文檔的mysql_fetch_assoc(),因爲它可以返回一個布爾

2

的mysqli利用面向對象編程。嘗試使用這種方法來代替:

function dbCon() { 
     if($mysqli = new mysqli('$hostname','$username','$password','$databasename')) return $mysqli; else return false; 
} 

if(!dbCon()) 
exit("<script language='javascript'>alert('Unable to connect to database')</script>"); 
else $con=dbCon(); 

if (isset($_GET['part'])){ 
    $partid = $_GET['part']; 
    $sql = "SELECT * 
     FROM $usertable 
     WHERE PartNumber = $partid"; 

    $result=$con->query($sql_query); 
    $row = $result->fetch_assoc(); 

    $partnumber = $partid; 
    $nsn = $row["NSN"]; 
    $description = $row["Description"]; 
    $quantity = $row["Quantity"]; 
    $condition = $row["Conditio"]; 
} 

讓我知道,如果你有任何問題,我無法測試這個代碼,所以您可能需要TRIPPLE檢查它!

+1

您的SQL查詢無效。您可以在單引號字符串中使用「NOT」變量 – Twister1002 2014-06-27 18:00:28

相關問題