#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();
?>