Запрос к БД из PHP не дает результата, но тот же запрос в phpMyAdmin работает?

#php #mysql #phpmyadmin

#php #mysql #phpmyadmin

Вопрос:

Итак, у меня есть простой запрос, который проверяет базу данных MySQL на наличие статей и повторяет HTML-код для динамической генерации моего блога. Запрос работает, когда я запускаю его напрямую с помощью phpMyAdmin, но когда он вызывается из файла .php, он показывает «No Results». Вот запрос:

 SELECT * FROM article ORDER BY article_timestamp DESC LIMIT 4;
  

При тестировании на phpMyAdmin работает нормально. Но когда это в моем php-коде, это не так. Приведенный ниже PHP-код:

 <?php

// establish connection
function connect() {
    $connection = mysql_connect ("localhost", "user", "password", "dbname") or die(mysql_error);

    return $connection;
}

$connection = connect();


// define article variables

$article_id;
$article_title;
$article_headline;
$article_image_path;
$article_body;
$article_author;
$article_tags;
$article_timestamp;

$myquery = "SELECT * FROM article ORDER BY article_timestamp DESC LIMIT 4";

$result = mysql_query($connection, $myquery);

if (mysql_num_rows($result) > 0) {

    while($row = mysql_fetch_array($result)) {
        $article_id = $row['article_id'];

        $article_title = $row['article_title'];

        $article_headline = $row['article_headline'];

        $article_image_path = $row['article_image_path'];

        $article_body = $row['article_body'];

        $article_author = $row['article_author'];

        $article_tags = $row['article_tags'];


        $article_timestamp = $row['article_timestamp'];

        echo "<!-- Blog Post -->
                <h2>
                    <a href="post.php?id=$article_id">$article_title</a>
                </h2>
                <p class="lead">
                    by $article_author
                </p>
                <p>Posted on $article_timestamp</p>
                <hr>
                <img class="img-responsive" src="$article_image_path" alt="">
                <hr>
                <p class="lead">$article_headline</p>
                <a class="btn" style="border-color: #4c044d;" href="post.php?id=$article_id">Read More</a>

                <hr>";
    }
}

else {
    echo 'No Results found';
}

mysql_close ($connection);
?>
  

Подключение к БД должно работать нормально. Я добавил этот код:

 if ($connection == false) {
   echo 'whoops';
}
  

И условие никогда не выполняется, когда оно помещается на различные контрольные точки. Может кто-нибудь помочь мне? Потратил на это часы и никаких кубиков.
Заранее спасибо.

Комментарии:

1. зачем объявлять все переменные дважды?

2. Не используйте устаревшие mysql_* функции. Они устарели с PHP 5.5 и полностью удалены в PHP 7. Они также небезопасны. Вместо этого используйте MySQLi или PDO.

3. У вас включено сообщение об ошибках? Проверил ваши журналы ошибок?

4. Вы должны прочитать руководство: php.net/manual/en/function.mysql-query.php . Это должно быть mysql_query($query, $conn) , но у вас есть mysql_query($conn, $query) (неправильный порядок). Вот почему вы всегда должны проверять свой журнал ошибок в качестве первого действия.

5.вы используете mysql_connect() как mysqli_connect() php.net/manual/en/function.mysql-connect.php хотя это устаревший api.

Ответ №1:

Пожалуйста, измените свою функцию подключения, как показано ниже

 $connection = mysql_connect ("localhost", "root", "redhat") or die(mysql_error());
    mysql_select_db('test');
  

Также, пожалуйста, используйте mysqli, поскольку mysql устарел в новых версиях php

Комментарии:

1. После слишком долгих проб и ошибок я понял, что проблема связана с моими учетными данными. Cpanel отказывал пользователю, которого я создал, в доступе к БД, и поэтому использование моих исходных учетных данных Cpanel сделало свое дело. Спасибо за помощь. Кроме того, я изменил все свои вызовы DB на использование mysqli, как было предложено.

2. Добро пожаловать, эти комментарии помогают мне ответить на многие запросы, задаваемые в stackoverflow.

Ответ №2:

MYSQL_ * устарел попробуйте использовать mysqli_ * или PDO

Предупреждение mysql_query, mysql_fetch_array, mysql_connect и т. Д. Расширения устарели в PHP 5.5.0, и они были удалены в PHP 7.0.0. Вместо этого следует использовать расширение MySQLi или PDO_MySQL.

         <?php

    // establish connection
    function connect() {

        $servername = "localhost";  //host name

        $username = "username"; //username

        $password = "password"; //password

        $mysql_database = "dbname"; //database name

        $connection = mysqli_connect($servername, $username, $password,$mysql_database) or die("Connection failed: " . mysqli_connect_error());

        return $connection;
    }

    $connection = connect();

    $myquery = "SELECT * FROM article ORDER BY article_timestamp DESC LIMIT 4";


     $stmt = $connection->prepare($myquery );

                    //The argument may be one of four types:

                    //i - integer
                    //d - double
                    //s - string
                    //b - BLOB
                    //change it by respectively 

                    $stmt->execute();

                    $get_result =$stmt->get_result();

                    $row_count= $get_result->num_rows;


    if ($row_count > 0) {

        while($row = mysqli_fetch_array($get_result)) {
            $article_id = $row['article_id'];

            $article_title = $row['article_title'];

            $article_headline = $row['article_headline'];

            $article_image_path = $row['article_image_path'];

            $article_body = $row['article_body'];

            $article_author = $row['article_author'];

            $article_tags = $row['article_tags'];


            $article_timestamp = $row['article_timestamp'];

            echo "<!-- Blog Post -->
                    <h2>
                        <a href="post.php?id=$article_id">$article_title</a>
                    </h2>
                    <p class="lead">
                        by $article_author
                    </p>
                    <p>Posted on $article_timestamp</p>
                    <hr>
                    <img class="img-responsive" src="$article_image_path" alt="">
                    <hr>
                    <p class="lead">$article_headline</p>
                    <a class="btn" style="border-color: #4c044d;" href="post.php?id=$article_id">Read More</a>

                    <hr>";
        }
    }

    else {
        echo 'No Results found';
    }


                    $stmt->close();
                    $connection->close();


    ?>