PHP mysql_query error - PullRequest
       0

PHP mysql_query error

1 голос
/ 16 января 2010

Я пытаюсь учиться, и я застрял. Я не понимаю, почему это не работает. Если я просто оставляю функцию включения и удаляю вызов функции и не заключаю соединение с базой данных в функцию, она работает правильно.

Что мне здесь не хватает?

Сообщение об ошибке:

Предупреждение: mysql_query (): предоставленный аргумент не является допустимым ресурсом MySQL-Link в /home3/badamsne/public_html/views/dogs.php в строке 24 Ошибка запроса к базе данных:

Код веб-страницы:

    <?php
    include("../model/db_conn.php");

    db_conn();
?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title></title>
</head>
<body>
  <?php



    // 3. Perform database query
    $result = mysql_query("SELECT * FROM dogs", $connection);
    if(!$result) {
        die("Database query failed: " . mysql_error());
        }

     // 4. Use returned data
           while ($row = mysql_fetch_array($result)) {
                echo $row[0]." ".$row[1]."<br />";
           }
  ?>
</body>
</html>
<?php
// 5. Close connection
   mysql_close($connection);
?>

Функция PHP в отдельном файле:

<?php

function db_conn() {

    // 1. Create database connection
    $connection = mysql_connect("localhost","website_admin","p@ssw0rd");
    if(!$connection) {
        die("Database connection failed: " . mysql_error());
        }

    // 2. Select a database to use
    $db_select = mysql_select_db("website_db", $connection);
    if(!$db_select) {
        die("Database selection failed: " . mysql_error());
       }
}
?>

Спасибо! Том

Ответы [ 3 ]

4 голосов
/ 16 января 2010

вы никогда не вернете $ connection из вашей функции и не захватите ее как переменную в верхнем файле

Изменить это:

<?php
include("../model/db_conn.php");

db_conn();

?>

К этому:

 <?php
include("../model/db_conn.php");

$connection = db_conn();

?>

И добавить

return $connection;

к вашей функции.

0 голосов
/ 16 января 2010

Похоже, $connection создается как локальная переменная для функции db_conn(). Вы можете объявить его глобальным, чтобы другой код имел к нему доступ:

function db_conn()
{
    global $connection;

    $connection = mysql_connect( ... );

}

// now $connection is available everywhere

примечание: В большинстве языков программирования есть предостережения относительно неправильного использования глобальных переменных. См. Глобальные переменные, признанные вредными W.A. Wulf и M. Shaw (ACM SIGPLAN, 1973).

0 голосов
/ 16 января 2010

Ваша проблема в том, что переменная $ connection не является глобальной. Это означает, что он «виден» только в контексте функции db_conn (), а не в основной программе.

Есть три простых решения вашей проблемы:

  1. Добавить 'global $ connection;' как первая команда для вашей функции.
  2. Вам не нужно предоставлять ресурс соединения MySQL для функции mysql_query, если вы только что открыли одно соединение. Так что 'mysql_query ("SELECT * FROM dogs");' будет работать тоже.
  3. Вы также можете вернуть переменную $ connection из вашей функции.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...