Возможный дубликат:
Предупреждение: mysql_fetch_array (): предоставленный аргумент не является допустимым результатом MySQL
У меня есть эта ошибка:
mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /home/marlon/domains/webmasterplaats.nl/public_html/edit.php on line 36
Это код:
<?php $ip = $_SERVER['REMOTE_ADDR']; $toegang[] = '86.91.195.26'; $toegang[] = '84.86.189.70'; $valid = true; if(in_array($ip, $toegang) || isset($valid)) { if(isset($_GET['id'])) { if($_SERVER['REQUEST_METHOD'] == 'POST') { mysql_query("UPDATE news SET titel='" . mysql_real_escape_string($_POST['titel']) . "', inhoud='" . mysql_real_escape_string($_POST['edit2']) . "' WHERE id='" . mysql_real_escape_string($_GET['id']) . "'"); echo 'Met success geupdate.' ; } $database = mysql_connect('localhost','marlonhe19','123456789asd'); mysql_select_db('wmp', $database); $id = $_GET['id']; $mysql = mysql_query("SELECT * FROM news WHERE id='$id' ;"); while($row = mysql_fetch_assoc($mysql)){ $id = $row['id']; $titel = $row['titel']; $inhoud = $row['inhoud']; echo ' <form id="form1" name="form1" method="post" action=""> <input type="text" name="titel" value="$titel" /><br /> <textarea name="edit2">$inhoud</textarea> <br /> <input type="submit" name="Submit" value="Opslaan" />'; } } }
В чем проблема?
Предупреждение: возможна инъекция SQL. Похоже, ваш запрос не удался.
Замените это:
$mysql = mysql_query("SELECT * FROM news WHERE id='$id' ;");
С:
$mysql = mysql_query("SELECT * FROM news WHERE id='$id' ;") or die(mysql_error());
Вы должны сделать свою собственную функцию обработки ошибок, желательно отобразить сообщение об ошибке, не выходя сразу.
Вам не нужен полуколок ( ;
) в:
$mysql = mysql_query("SELECT * FROM news WHERE id='$id' ;");
Поскольку вы проходите мимо ;
, выполнение запроса завершается с ошибкой, а mysql_query
возвращает false
а не объект. Когда вы передаете false
в mysql_fetch_assoc
он дает ошибку, которую вы получаете.
Всегда добавляйте проверку ошибок:
$mysql = mysql_query("SELECT * FROM news WHERE id='$id'") or die(mysql_error());
Похоже, ваша часть выбора БД имеет проблему. Добавьте к этому проверку ошибок:
РЕДАКТИРОВАТЬ:
mysql_select_db('wmp', $database) or die(mysql_error());
Вы должны проверить наличие ошибок, например.
$news_result = mysql_query("SELECT * FROM news WHERE id='$id'") or die("Query failed: ".mysql_error());
Кроме того, вы должны назвать переменные результатов запроса чем-то разумным, то есть не $mysql
и вы должны использовать переменные связывания для защиты от SQL-инъекции. Рассмотрим строку запроса:
page.php?id='+OR+'1'='1
Вы пытались запустить запрос из приглашения mysql. Похоже, запрос возвращает ошибку. Попробуйте изменить свою линию
$mysql = mysql_query("SELECT * FROM news WHERE id='$id' ;");
в
$mysql = mysql_query("SELECT * FROM news WHERE id='$id' ;") or die(mysql_error());