提问者:小点点

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

共3个答案

匿名用户

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

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

对此:

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

因为“can interpreted$variables while”不能。

对于整数(数字)可以很好地工作,对于字符串,您需要将$变量放在单引号中,如

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

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

 $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查询中直接包含请求变量,否则用户可以在查询中注入SQL。 (请参见SQL注入。)

您应该转义变量:

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

或者更好地使用准备好的语句

匿名用户

您只引用了SQL语句,这使变量成为文本而不是变量。

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