mysqli_fetch_assoc()期望参数1是mysqli_result,布尔给定

可能重复:
PHP:警告:sort()期望参数1是数组,给定的资源

我对PHP和MySQL相当陌生,我只是无法弄清楚这一点。 我已经search了所有的论坛,但还没有find我可以理解的答案。 我最初使用的是mysql_fetch_assoc(),但是我只能search数字,而且在search字母时也收到了错误。 我希望我能在这里find正确的方向。 预先感谢您的帮助!

$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"]; } 

当你的结果不是一个结果(而是一个“假”)时,会发生这种情况。 你应该改变这一行

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

对此:

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

因为“可以解释$variables”而不能。

可以用整数(数字)正常工作,对于需要将$variables放在单引号中的string,比如

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

如果你想/必须使用单引号,那么php不能解释variables,你将不得不这样做:

  $sql = 'SELECT * FROM '.$usertable.' WHERE string_column = "'.$string.'" AND integer_column = '.$number.'; 
 mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given 

这意味着你传递的第一个参数是一个布尔值(true或false)。

第一个参数是$result ,它是false因为查询中有语法错误。

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

您不应该直接在SQL查询中包含请求variables,否则用户可以在查询中注入SQL。 (请参阅SQL注入 。)

你应该逃避variables:

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

或者更好的是,使用Prepared Statements

你是单引号你的SQL语句是使variables文本,而不是variables。

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

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"]; } 

让我知道如果您有任何问题,我无法testing这个代码,所以你可能需要tripple检查它!

如果$usertable不是有效的表格,或者不包含列PartNumber或part不是一个数字,代码中会发生什么情况。

您必须转义$ partid,并且还要读取mysql_fetch_assoc()的文档,因为它可以返回布尔值