mysqli_fetch_assoc()预计参数1被mysqli_result,布尔给出[重复]my

2019-06-14 15:58发布

这个问题已经在这里有一个答案:

  • mysql_fetch_array()/ mysql_fetch_assoc()/ mysql_fetch_row()能够/ mysql_num_rows等...预计参数1是资源或导致 32个答案

可能重复:
PHP:警告:排序()预计参数1是阵列,给定资源

我非常新的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"];
}

Answer 1:

发生这种情况时,你的结果是没有结果的(但“假”来代替)。 你应该改变这一行

$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.';


Answer 2:

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) . "';"

或者更好的,用Prepared Statements



Answer 3:

你是单身引用这使得变量文本而不是变量的SQL语句。

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


Answer 4:

库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检查它!



Answer 5:

如果在你的代码会发生什么$usertable是不是有效的表或不包括柱部分号码或部分不是数字。

你必须逃离$ PARTID也读mysql_fetch_assoc(文档),因为它可以返回一个布尔



文章来源: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given [duplicate]