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