我正在努力学习而且我被困住了。我不明白为什么这不起作用。如果我只是离开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());
}
}
?>
谢谢! 汤姆
答案 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()的上下文中“可见”而不是在主程序中。
您的问题有三种简单的解决方案:
答案 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)。