Возможный дубликат:
Msgstr "Предупреждение: mysql_fetch_array () ожидает, что параметр 1 будет ресурсом, boolean данный" ошибка при попытке создания корзины php
Я не понимаю, я не вижу ошибок в этом коде, но есть эта ошибка, пожалуйста, помогите:
mysql_fetch_array () ожидает, что параметр 1 будет проблемой ресурсов
<?php $con = mysql_connect("localhost","root","nitoryolai123$%^"); if (!$con) { die('Could not connect: ' . mysql_error()); } mysql_select_db("school", $con); $result = mysql_query("SELECT * FROM student WHERE IDNO=".$_GET['id']); ?> <?php while ($row = mysql_fetch_array($result)) { ?> <table class="a" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#D3D3D3"> <tr> <form name="formcheck" method="get" action="updateact.php" onsubmit="return formCheck(this);"> <td> <table border="0" cellpadding="3" cellspacing="1" bgcolor=""> <tr> <td colspan="16" height="25" style="background:#5C915C; color:white; border:white 1px solid; text-align: left"><strong><font size="2">Update Students</td> <tr> <td width="30" height="35"><font size="2">*ID Number:</td> <td width="30"><input name="idnum" onkeypress="return isNumberKey(event)" type="text" maxlength="5" id='numbers'/ value="<?php echo $_GET['id']; ?>"></td> </tr> <tr> <td width="30" height="35"><font size="2">*Year:</td> <td width="30"><input name="yr" onkeypress="return isNumberKey(event)" type="text" maxlength="5" id='numbers'/ value="<?php echo $row["YEAR"]; ?>"></td> <?php } ?>
Я просто пытаюсь загрузить данные в формы, но я не знаю, почему эта ошибка появляется. Что может быть ошибкой здесь?
Вы не выполняете проверку ошибок после вызова mysql_query :
$result = mysql_query("SELECT * FROM student WHERE IDNO=".$_GET['id']); if (!$result) { // add this check. die('Invalid query: ' . mysql_error()); }
В случае mysql_query
он возвращает false
, boolean
значение. Когда вы передаете это функции mysql_fetch_array
(которая ожидает mysql result object
), мы получаем эту ошибку.
$id = intval($_GET['id']); $sql = "SELECT * FROM student WHERE IDNO=$id"; $result = mysql_query($sql) or trigger_error(mysql_error().$sql);
всегда делайте это так, и он скажет вам, что не так
Попробуйте
$indo=$_GET['id']; $result = mysql_query("SELECT * FROM student WHERE IDNO='$indo'");
Я думаю, это работает ..
Наиболее вероятной причиной является ошибка в mysql_query()
. Вы проверили, чтобы убедиться, что это сработало? Выведите значение $result
и mysql_error()
. Возможно, у вас что-то написано неправильно, выбрана неправильная база данных, есть проблема с разрешениями и т. Д. Итак:
$id = (int)$_GET['id']; // this also sanitizes it $sql = "SELECT * FROM student WHERE idno = $id"; $result = mysql_query($sql); if (!$result) { die("Error running $sql: " . mysql_error()); }
Санитирование $_GET['id']
действительно важно. Вы можете использовать mysql_real_escape_string()
но приведение его к int
достаточно для целых чисел. В основном вы хотите избежать SQL-инъекции.
Убедитесь, что ваш запрос успешно запущен, и вы получили результаты. Вы можете проверить следующее:
$result = mysql_query("SELECT * FROM student WHERE IDNO=".$_GET['id']) or die(mysql_error()); if (is_resource($result)) { // your while loop and fetch array function here.... }
В вашей базе данных какой тип «IDNO»? Вам может понадобиться избежать sql здесь:
$result = mysql_query("SELECT * FROM student WHERE IDNO=".$_GET['id']);
Вы используете это:
mysql_fetch_array($result)
Чтобы получить ошибку, которую вы получаете, это означает, что $result
не является ресурсом.
В вашем коде $result
получается следующим образом:
$result = mysql_query("SELECT * FROM student WHERE IDNO=".$_GET['id']);
Если SQL-запрос mysql_query
ошибкой, $result
не будет ресурсом , а логическим – см. mysql_query
.
Я предполагаю, что в вашем SQL-запросе есть ошибка – так что это не удается, mysql_query
возвращает логическое, а не ресурс, а mysql_fetch_array
не может работать над этим.
Вы должны проверить, возвращает ли SQL-запрос результат или нет:
$result = mysql_query("SELECT * FROM student WHERE IDNO=".$_GET['id']); if ($result !== false) { // use $result } else { // an error has occured echo mysql_error(); die; // note : echoing the error message and dying // is OK while developping, but not in production ! }
При этом вы должны получить сообщение, указывающее на ошибку, возникшую во время выполнения вашего запроса, – это должно помочь выяснить, в чем проблема 🙂
Кроме того, вам следует избегать данных, которые вы вставляете в ваш SQL-запрос, чтобы избежать инъекций SQL !
Например, здесь вы должны убедиться, что $_GET['id']
содержит не что иное, как целое число, используя что-то вроде этого:
$result = mysql_query("SELECT * FROM student WHERE IDNO=" . intval($_GET['id']));
Или вы должны проверить это, прежде чем пытаться выполнить запрос, чтобы отобразить пользователю более приятное сообщение об ошибке.