2012-07-05 43 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

相关问题