mysqli fetch assoc () ожидает, что параметр 1 будет результатом mysqli, логическим заданным [дубликат]

этот вопрос уже есть ответ здесь:

Возможные Дубликаты:
PHP: Warning: sort () ожидает, что параметр 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"];
}

5 ответов


это происходит, когда ваш результат не является результатом (но вместо этого "false"). Вы должны изменить эту строку

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

для этого:

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

потому что "можно истолковать переменных $а' не может.

отлично работает с целыми числами( числами), для строк вам нужно поместить переменную $в одинарные кавычки, например

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

или лучше используйте Prepared Statements.


вы единично цитируете свой оператор SQL, который делает текст переменных вместо переменных.

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

Дайте мне знать, если у вас есть какие-либо вопросы, я не мог проверить этот код, поэтому вам может потребоваться триппл проверить его!


что происходит в вашем коде, если $usertable не является допустимой таблицей или не включает столбец PartNumber или часть не является номером.

вы должны избежать $partid, а также прочитать документ для mysql_fetch_assoc (), потому что он может вернуть логическое