Mysql
 sql >> база данни >  >> RDS >> Mysql

mysql_fetch_array()/mysql_fetch_assoc()/mysql_fetch_row()/mysql_num_rows и т.н.... очаква параметър 1 да бъде ресурс

Заявката може да се провали поради различни причини, в който случай и mysql_*, и разширението mysqli ще върнат false от съответните им функции/методи за заявка. Трябва да тествате за това условие за грешка и да го третирате съответно.

mysql_* разширение :

ЗАБЕЛЕЖКА mysql_ функциите са отхвърлени и са премахнати във версия 7 на php.

Проверете $result преди да го предадете на mysql_fetch_array . Ще откриете, че е false защото заявката е неуспешна. Вижте mysql_query документация за възможни върнати стойности и предложения как да се справите с тях.

$username = mysql_real_escape_string($_POST['username']);
$password = $_POST['password'];
$result = mysql_query("SELECT * FROM Users WHERE UserName LIKE '$username'");

if($result === FALSE) { 
    die(mysql_error()); // TODO: better error handling
}

while($row = mysql_fetch_array($result))
{
    echo $row['FirstName'];
}

mysqli разширение
процедурен стил :

$username = mysqli_real_escape_string($mysqli, $_POST['username']);
$result = mysqli_query($mysqli, "SELECT * FROM Users WHERE UserName LIKE '$username'");

// mysqli_query returns false if something went wrong with the query
if($result === FALSE) { 
    yourErrorHandler(mysqli_error($mysqli));
}
else {
    // as of php 5.4 mysqli_result implements Traversable, so you can use it with foreach
    foreach( $result as $row ) {
        ...

oo-style :

$username = $mysqli->escape_string($_POST['username']);
$result = $mysqli->query("SELECT * FROM Users WHERE UserName LIKE '$username'");

if($result === FALSE) { 
    yourErrorHandler($mysqli->error); // or $mysqli->error_list
}
else {
    // as of php 5.4 mysqli_result implements Traversable, so you can use it with foreach
    foreach( $result as $row ) {
      ...

с помощта на подготвен израз:

$stmt = $mysqli->prepare('SELECT * FROM Users WHERE UserName LIKE ?');
if ( !$stmt ) {
    yourErrorHandler($mysqli->error); // or $mysqli->error_list
}
else if ( !$stmt->bind_param('s', $_POST['username']) ) {
    yourErrorHandler($stmt->error); // or $stmt->error_list
}
else if ( !$stmt->execute() ) {
    yourErrorHandler($stmt->error); // or $stmt->error_list
}
else {
    $result = $stmt->get_result();
    // as of php 5.4 mysqli_result implements Traversable, so you can use it with foreach
    foreach( $result as $row ) {
      ...

Тези примери само илюстрират какво трябва да се направи (обработка на грешки), а не как да се направи. Производственият код не трябва да използва or die когато извежда HTML, в противен случай той (най-малкото) ще генерира невалиден HTML. Освен това съобщенията за грешки в базата данни не трябва да се показват на потребители без администратор, тъй като разкрива твърде много информация .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да стартирате mysqladmin flush-hosts на Amazon RDS

  2. Създайте MySQL база данни

  3. 2 начина за изброяване на всички функции в MySQL

  4. Как работи функцията RIGHT() в MySQL

  5. Пълнотекстови търсения в MySQL:доброто, лошото и грозното