PHP mysql_query错误

时间:2010-01-16 00:44:25

标签: php

我正在努力学习而且我被困住了。我不明白为什么这不起作用。如果我只是离开include并删除函数调用,并且不将数据库连接包装在函数中,则它可以正常工作。

我在这里缺少什么?

错误讯息:

  

警告:mysql_query():提供的参数不是第24行/home3/badamsne/public_html/views/dogs.php中有效的MySQL-Link资源   数据库查询失败:

网页代码:

    <?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 个答案:

答案 0 :(得分:4)

你永远不会从你的函数返回$ connection,也不会将它作为顶部文件中的变量捕获。

改变这个:

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

db_conn();

&GT;

To This:

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

$connection = db_conn();

&GT;

并添加

return $connection;

到你的功能。

答案 1 :(得分:0)

你的问题是,$ connection变量不是全局变量。这意味着它只在函数db_conn()的上下文中“可见”而不是在主程序中。

您的问题有三种简单的解决方案:

  1. 添加'global $ connection;'作为你职能的第一个命令。
  2. 如果刚刚打开一个连接,则不必向mysql_query函数提供MySQL连接资源。所以'mysql_query(“SELECT * FROM dogs”);'也会奏效。
  3. 您还可以从函数中返回$ connection变量。

答案 2 :(得分:0)

看起来$connection被创建为db_conn()函数的局部变量。您可以将其声明为全局,以便其他代码可以访问它:

function db_conn()
{
    global $connection;

    $connection = mysql_connect( ... );

}

// now $connection is available everywhere

注意:大多数编程语言都有关于滥用全局变量的警告。见W.A.Wulf和M. Shaw的Global Variables Considered Harmful(ACM SIGPLAN,1973)。