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