mysqli_fetch_assoc () ожидает, что параметр 1 будет mysqli_result, boolean given

Возможный дубликат:
PHP: Предупреждение: 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"]; } 

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

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

к этому:

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

потому что «не может интерпретировать переменные $ while 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($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 (), поскольку он может возвращать логическое