Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Базы Данных > Не выводятся данные на экран / MySQL - ошибка PHP


Автор: McDoc 24.6.2014, 16:10
Не могу вывести результат запроса из MYSQL.

Код

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"    "http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
<HTML xmlns="http://www.w3.org/1999/xhtml">
<meta http-equiv="refresh" content="60">
        
<?php

$username = 'root';
$password = '';
$mydb = 'task_db';

$db = new mysqli('localhost', $username, $password, $mydb) or die ("Unable to connect to MySQL");

// echo"Great connection"; // Test connection

$sql = "SELECT `description`, DATE_FORMAT( current_date, \'%d %b %y\' ), `start_time`\n"
    . "FROM tasks\n"
    . "WHERE `code` LIKE \'daily\'\n"
    . "AND `start_time` > current_time\n"
    . "AND `exp_day` >= current_date\n"
    . "ORDER BY `start_time` ";
    
    echo"Tasks in HETG";
    
     $result = mysql_query($sql);
            echo "<table width=100><tr>";
                echo "<td>HETG Task</td>";
                echo "<td>Date</td>";
                echo "<td>Time</td>";
            while($row = mssql_fetch_array($result)) 
            {            
                echo "<tr>";
                echo "<td>".$row['description']."</td>";
                echo "<td>".$row['current_date']."</td>";
                echo "<td>".$row['start_time']."</td>";
                echo "</tr>";
            }
            echo "</table><br/>";

mysqli_close($db);
?>


Простенькая табличка с тремя колонками. 

Ошибка:

Fatal error: Call to undefined function mssql_fetch_array() in C:\xampp\htdocs\Inform_dash\index.php on line 29

user posted image

Где ошибка?

Автор: AVA12 24.6.2014, 17:03
Я сначала хотел посоветовать прочитать сообщение об ошибке. Но, думаю, лучше будет найти какого-нибудь программиста и доверить написание кода ему.

Автор: McDoc 24.6.2014, 17:12
Еще раз пересмотрел код, нашел опечатку. 
Ошибка изменилась....

Код

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"    "http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
<HTML xmlns="http://www.w3.org/1999/xhtml">
<meta http-equiv="refresh" content="60">
        
<?php

$username = 'root';
$password = '';
$mydb = 'task_db';

$db = new mysqli('localhost', $username, $password, $mydb) or die ("Unable to connect to MySQL");

// echo"Great connection"; // Test connection

$sql = "SELECT `description`, DATE_FORMAT( current_date, \'%d %b %y\' ), `start_time`\n"
    . "FROM tasks\n"
    . "WHERE `code` LIKE \'daily\'\n"
    . "AND `start_time` > current_time\n"
    . "AND `exp_day` >= current_date\n"
    . "ORDER BY `start_time` ";
    
    echo"Tasks in HETG";
    
     $result = mysql_query($sql);
            echo "<table width=100><tr>";
                echo "<td>HETG Task</td>";
                echo "<td>Date</td>";
                echo "<td>Time</td>";
            while($row = mysql_fetch_array($result)) 
            {            
                echo "<tr>";
                echo "<td>".$row['description']."</td>";
                echo "<td>".$row['DATE_FORMAT']."</td>";
                echo "<td>".$row['start_time']."</td>";
                echo "</tr>";
            }
            echo "</table><br/>";

mysqli_close($db);
?>


Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\Inform_dash\index.php on line 29

Добавлено через 9 минут и 52 секунды
Что бы читать ошибки, добавил пару строк:

Код

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"    "http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
<HTML xmlns="http://www.w3.org/1999/xhtml">
<meta http-equiv="refresh" content="60">
        
<?php

            ini_set('display_errors','On');
            error_reporting(E_ALL|E_STRICT);

$username = 'root';
$password = '';
$mydb = 'task_db';

$db = new mysqli('localhost', $username, $password, $mydb) or die ("Unable to connect to MySQL");

// echo"Great connection"; // Test connection

$sql = "SELECT `description`, DATE_FORMAT( current_date, \'%d %b %y\' ), `start_time`\n"
    . "FROM tasks\n"
    . "WHERE `code` LIKE \'daily\'\n"
    . "AND `start_time` > current_time\n"
    . "AND `exp_day` >= current_date\n"
    . "ORDER BY `start_time` ";
    
    echo"Tasks in HETG";
    
     $result = mysql_query($sql);
            echo "<table width=100><tr>";
                echo "<td>HETG Task</td>";
                echo "<td>Date</td>";
                echo "<td>Time</td>";
                
                if($result === FALSE) {
             die(mysql_error()); // TODO: better error handling
}    
                
            while($row = mysql_fetch_array($result)) 
            {            
                echo "<tr>";
                echo "<td>".$row['description']."</td>";
                echo "<td>".$row['DATE_FORMAT']."</td>";
                echo "<td>".$row['start_time']."</td>";
                echo "</tr>";
            }
            echo "</table><br/>";

mysqli_close($db);
?>


Deprecated: mysql_query(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in C:\xampp\htdocs\Inform_dash\index.php on line 27
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '\'%d %b %y\' ), `start_time` FROM tasks WHERE `code` LIKE \'daily\' AND `start_t' at line 1

Вот теперь чуть понятней... хотя.. не совсем. Этот код скомпелировал в РНР XAMPP...

Автор: Aliance 24.6.2014, 17:56
1. первая ошибка вам говорит, что вы используете устарелые функции mysql_*, нужно перейти на PDO или mysqli_*
2. вторая ошибка вам говорит, что у вас собственно синтаксическая ошибка в запросе
3. mysqli_close ?

Автор: McDoc 24.6.2014, 18:25
Цитата(Aliance @ 24.6.2014,  17:56)
1. первая ошибка вам говорит, что вы используете устарелые функции mysql_*, нужно перейти на PDO или mysqli_*
2. вторая ошибка вам говорит, что у вас собственно синтаксическая ошибка в запросе
3. mysqli_close ?

Да я действительно над этим работаю. Кое что устранил.... сейчас вот что:

Код

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"    "http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
<HTML xmlns="http://www.w3.org/1999/xhtml">
<meta http-equiv="refresh" content="60">
        
<?php
            ini_set('display_errors','On');
            error_reporting(E_ALL|E_STRICT);

$mydb = 'task_db';

$db = new mysqli('localhost', 'root', '', $mydb) or die ("Unable to connect to MySQL");

        echo "Great connection"; // Test connection
        
$sql = "SELECT `description`, current_date, `start_time`\n"
    . "FROM tasks\n"
    . "WHERE `code` LIKE \'daily\'\n"
    . "AND `start_time` > current_time\n"
    . "AND `exp_day` >= current_date\n"
    . "ORDER BY `start_time` ";
    
    echo"<br></br>";
    echo"Tasks in HETG";
    
     $result = mysqli_query($sql, $db);
            echo "<table width=100 border=1 cellspacing=0 cellpadding=10><tr>";
                echo "<td>HETG Task</td>";
                echo "<td>Date</td>";
                echo "<td>Time</td>";
                
                if($result === FALSE) {
             die(mysql_error()); // TODO: better error handling
}    
                
            while($row = mysqli_fetch_array($result)) 
            {            
                echo "<tr>";
                echo "<td>".$row['description']."</td>";
                echo "<td>".$row['DATE_FORMAT']."</td>";
                echo "<td>".$row['start_time']."</td>";
                echo "</tr>";
            }
            echo "</table><br/>";

mysqli_close($db);
?>


ну и ошибки

Warning: mysqli_query() expects parameter 1 to be mysqli, string given in C:\xampp\htdocs\Inform_dash\index.php on line 25
HETG Task Date Time 
Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, null given in C:\xampp\htdocs\Inform_dash\index.php on line 35

Добавлено через 12 минут и 27 секунд
.............................................................................
Есть ли где готовый рабочий пример????

Автор: McDoc 24.6.2014, 19:00
.....................................................................
ну что, сделал по примеру - http://www.w3schools.com/php/func_mysqli_query.asp

Код

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"    "http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
<HTML xmlns="http://www.w3.org/1999/xhtml">
<meta http-equiv="refresh" content="60">
        
<?php
        ini_set('display_errors','On');
        error_reporting(E_ALL|E_STRICT);

        $con=mysqli_connect('localhost', 'root', '', 'task_db');

        if (mysqli_connect_errno())
          {
             echo "Failed to connect to MySQL: " . mysqli_connect_error();
          }
        
    mysqli_query($con, "SELECT `description`, current_date, `start_time`\n"
    . "FROM tasks\n"
    . "WHERE `code` LIKE \'daily\'\n"
    . "AND `start_time` > current_time\n"
    . "AND `exp_day` >= current_date\n"
    . "ORDER BY `start_time` ");
    
    echo"<br></br>";
    echo"Tasks in HETG";
    
             echo "<table width=100 border=1 cellspacing=0 cellpadding=10><tr>";
                echo "<td>HETG Task</td>";
                echo "<td>Date</td>";
                echo "<td>Time</td>";
                                
            while($row = mysqli_use_result($con)) // or mysqli_store_result
            {            
                echo "<tr>";
                echo "<td>".$row['description']."</td>";
                echo "<td>".$row['DATE_FORMAT']."</td>";
                echo "<td>".$row['start_time']."</td>";
                echo "</tr>";
            }
            echo "</table><br/>";

mysqli_close($con);
?>


Результат правда НОЛЬ:

user posted image

Автор: Aliance 25.6.2014, 10:01
McDoc, внешне все окей, выполните запрос в phpmyadmin и проверьте - он вообще что-то возвращает. может быть в нем ошибка.

Автор: McDoc 25.6.2014, 10:53
Идем в MyphpAdmin
Вставляем запрос:

SELECT  `description` AS  'Task', DATE_FORMAT(current_date,  '%d %b %y') AS  'Current date',  `start_time` AS  'Time'
FROM tasks
WHERE  `code` LIKE  'daily'
AND  `start_time` > current_time
AND  `exp_day` >= current_date
ORDER BY  `start_time` 

Получаем

user posted image

Далее жмем  на :

Create PHP code

И Полчаем :

$sql = "SELECT `description` AS \'Task\', DATE_FORMAT(current_date, \'%d %b %y\') AS \'Current date\', `start_time` AS \'Time\'\n"
    . "FROM tasks\n"
    . "WHERE `code` LIKE \'daily\'\n"
    . "AND `start_time` > current_time\n"
    . "AND `exp_day` >= current_date\n"
    . "ORDER BY `start_time` ";

Вставлем в страницу и ничего не получаем.

Вставил echo - про проверки где загвоздка. 
 echo"Tasks in HETG";
    
             echo "<table width=100 border=1 cellspacing=0 cellpadding=10><tr>";
                echo "<td>HETG Task</td>";
                echo "<td>Date</td>";
                echo "<td>Time</td>";
                echo "Test # 5"; // OK
            
            while($row = mysqli_use_result($con)) // or mysqli_store_result
            {        
                echo "Test # 6";    // False
                echo "<tr>";
                echo "<td>".$row['description']."</td>";
                echo "<td>".$row['current_date']."</td>";
                echo "<td>".$row['start_time']."</td>";
                echo "</tr>";
                echo "Test # 7";    // False
            }
            echo "</table><br/>";

Проблема внутри while loop.....

user posted image

Добавлено через 2 минуты и 43 секунды
Да...
Вставлял в страницу "чистый" запрос (не как для РНР) тоже самое ничего не выводит.

Автор: baldina 25.6.2014, 12:01
Код

if ($result = mysqli_use_result($con)) {
  while ($row = mysqli_fetch_row($result)) {
    ...
  }
  $result->close();
}

Автор: McDoc 25.6.2014, 12:35
Спасибо! 
Не работает ((((

Код

    echo"Tasks in HETG";
    
             echo "<table width=100 border=1 cellspacing=0 cellpadding=10><tr>";
                echo "<td>HETG Task</td>";
                echo "<td>Date</td>";
                echo "<td>Time</td>";
                echo "Test # 5"; // OK

            if ($result = mysqli_use_result($con)) {
                
            while($row = mysqli_fetch_row($result))
            {        
                echo "Test # 6";    // False
                echo "<tr>";
                echo "<td>".$row['description']."</td>";
                echo "<td>".$row['current_date']."</td>";
                echo "<td>".$row['start_time']."</td>";
                echo "</tr>";
                echo "Test # 7";    // False
            }
                $result->close();
            }

Автор: baldina 25.6.2014, 13:14
Код

var_dump($row);

Автор: Aliance 25.6.2014, 13:29
Запрос же один, зачем использовать http://www.php.net//manual/ru/mysqli.use-result.php? Почему бы не использовать просто http://www.php.net//manual/ru/mysqli-result.fetch-row.php:
Код

<?php
$mysqli = new mysqli(...);

if (mysqli_connect_errno()) {
    exit();
}

$query = "SELECT ...";

if ($result = $mysqli->query($query)) {
    while ($row = $result->fetch_row()) {
        var_dump($row);
    }
    $result->close();
}

$mysqli->close();
?>

Автор: baldina 25.6.2014, 13:39
да. но у него другая проблема, хочет ассоциативный массив

Автор: McDoc 25.6.2014, 13:52
Это толко первый запрос.
Будут так же еще и другие.

Идея - раз в сутки на экране появляются задачи с описнаие и временем исполнения. Исполнил, рядом с задачей нажал кнопку исполнено и задание исчезло. 

Мне хотя бы вывести в на экран мой запрос, дальше буду колдовать....

Автор: baldina 25.6.2014, 16:24
McDoc, вы бы почитали http://www.php.net/manual/ru/mysqli.query.php, там есть обсуждение и примеры... мы ничего кроме того что там можно прочесть вам не сказали

Автор: McDoc 25.6.2014, 16:59
baldina, 
Не поверите, сейчас разбираюсь именно с этой документацией )))

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)