mysql_fetch_array () / mysql_fetch_assoc () / mysql_fetch_row () / mysql_num_rows etc ... ожидает, что параметр 1 будет ресурсом или результатом - PullRequest
929 голосов
/ 04 июня 2010

Я пытаюсь выбрать данные из таблицы MySQL, но получаю одно из следующих сообщений об ошибке:

mysql_fetch_array () ожидает, что параметр 1 будет ресурсом, логическое значение задано

или

mysqli_fetch_array () ожидает, что параметр 1 будет mysqli_result, логическое значение задано

или

Вызов функции-члена fetch_array () для логического / необъектного

Это мой код:

$username = $_POST['username'];
$password = $_POST['password'];

$result = mysql_query('SELECT * FROM Users WHERE UserName LIKE $username');

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

То же самое относится и к коду типа

$result = mysqli_query($mysqli, 'SELECT ...');
// mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given
while( $row=mysqli_fetch_array($result) ) {
    ...

и

$result = $mysqli->query($mysqli, 'SELECT ...');
// Call to a member function fetch_assoc() on a non-object
while( $row=$result->fetch_assoc($result) ) {
    ...

и

$result = $pdo->query('SELECT ...', PDO::FETCH_ASSOC);
// Invalid argument supplied for foreach()
foreach( $result as $row ) {
    ...

и

$stmt = $mysqli->prepare('SELECT ...');
// Call to a member function bind_param() on a non-object
$stmt->bind_param(...);

и

$stmt = $pdo->prepare('SELECT ...');
// Call to a member function bindParam() on a non-object
$stmt->bindParam(...);

Ответы [ 32 ]

28 голосов
/ 06 сентября 2012

Если вы попробовали все здесь, и это не работает, вы можете проверить сопоставление базы данных MySQL. Мой был установлен на шведскую сортировку. Затем я изменил его на utf8_general_ci и все просто включилось.

Надеюсь, это кому-нибудь поможет.

26 голосов
/ 25 февраля 2013

Попробуйте, это должно работать, в противном случае вам нужно распечатать ошибку, чтобы указать вашу проблему

$username = $_POST['username'];
$password = $_POST['password'];

$sql = "SELECT * from Users WHERE UserName LIKE '$username'";
$result = mysql_query($sql,$con);

while($row = mysql_fetch_array($result))
{
    echo $row['FirstName'];
}
26 голосов
/ 21 июля 2013
$query = "SELECT Name,Mobile,Website,Rating FROM grand_table order by 4";

while( $data = mysql_fetch_array($query))
{
    echo("<tr><td>$data[0]</td><td>$data[1]</td><td>$data[2]</td><td>$data[3]</td></tr>");      
}

Вместо использования запроса WHERE вы можете использовать этот запрос ORDER BY. Это намного лучше, чем это для использования запроса.

Я сделал этот запрос и не получаю ошибок, таких как параметр или логическое значение.

22 голосов
/ 30 мая 2013

Попробуйте следующий код. Может работать нормально.

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

while($row = mysql_fetch_array($result))
{
    echo $row['FirstName'];
}
21 голосов
/ 04 мая 2013

Может быть две причины:

  1. Открывали ли вы соединение с базой данных до вызова функции mysql_query? Я не вижу этого в вашем коде. Используйте mysql_connect перед выполнением запроса. См php.net/manual/en/function.mysql-connect.php

  2. Переменная $ username используется внутри одной строки кавычки, поэтому ее значение не будет оцениваться внутри запроса Запрос определенно не будет выполнен.

В-третьих, структура запроса склонна к SQL-инъекции . Вы можете использовать подготовленные заявления, чтобы избежать этой угрозы безопасности.

16 голосов
/ 01 октября 2013

Перейти к вашему config.php.У меня такая же проблема.Проверьте имя пользователя и пароль, а также выберите sql select с тем же именем, что и в конфигурации.

16 голосов
/ 19 сентября 2013
<?php
    $username = $_POST['username'];
    $password = $_POST['password'];
    $result = mysql_query("SELECT * FROM Users WHERE UserName LIKE '".$username."'");

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

И если есть пользователь с уникальным именем пользователя, вы можете использовать «=» для этого. Нет необходимости любить.

Ваш запрос будет:

mysql_query("SELECT * FROM Users WHERE UserName ='".$username."'");
15 голосов
/ 16 апреля 2015

Не используйте устаревшую функцию mysql_ * (удаленная в php 5.5 будет удалена в php 7). и вы можете сделать это с помощью mysqli или pdo

вот полный запрос на выборку

<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 

$sql = "SELECT id, firstname, lastname FROM MyGuests";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
        // code here 
    }
} else {
    echo "0 results";
}
$conn->close();
?>
15 голосов
/ 30 октября 2013

Включить переменную строки подключения перед запросом MySQL.Например, $connt в этом коде:

$results = mysql_query($connt, "SELECT * FROM users");
13 голосов
/ 28 апреля 2015

Попробуйте

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

if($result){
while($row = mysqli_fetch_array($result))
{
    echo $row['FirstName'];
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...