有关is_resource()函数的快速PHP查询

时间:2012-02-26 06:48:05

标签: php mysql connect

我正在努力学习并熟练掌握PHP。我根本没有编程经验。刚刚完成了由PHPAcademy制作的关于Youtube的200个视频教程系列,我开始理解像程序员一样思考的内容。

我正在阅读另一个教程,该教程提供了有关如何使用前端和后端设置创建复杂登录系统的完整源代码和说明。我只是刚开始,但我已经有点困惑了。我需要创建一个名为“database.php”的PHP脚本来连接数据库。

源代码中编写的代码如下:

<?php
session_start();
ob_start();
$hasDB = false;
$server = 'localhost';
$user = 'root';
$pass = '';
$db = 'acl_test';
$link = mysql_connect($server,$user,$pass);
if (!is_resource($link)) {   
$hasDB = false;
die("Could not connect to the MySQL server at localhost.");
} else {   
$hasDB = true;
mysql_select_db($db);
}
?>

我的问题: 1)我从未学过函数is_resource。所以我查了一下,但这个定义对我没有任何意义。 Is_resource只是检查你是否得到了回报?我不明白为什么你这样做是必要的:(这是我从PHPacademy学到的方式)

<?php

$conn_error = 'Could not connect.';
$server = 'localhost';
$user = 'root';
$pass = '';
$db = 'tutorial';

if (!@mysql_connect($server, $user, $pass) || !@mysql_select_db($db)) {
die($conn_error);
}


?>

2)使用函数“is_resource()”的好处或缺点是什么,而不是直接测试mysql_connect()? $ hasDB是什么意思?在上面的IF语句中,它正在测试is_resource($ link)是否为真,然后它下降并读取$ hasDB = false,然后进入die()并杀死页面。为什么$ hasDB在这一点上甚至是必要的?

3)使用OOP连接数据库并创建一些类/实例不是更好的主意吗?

我问,因为虽然我可以按照我学习的方式编写它,但我看到并观察了新的和不同的方法来完成同样的事情,我想从一开始就学习良好,干净的编码习惯。对不起,如果这是一个初学者的问题,但必须从某个地方开始。有时在线定义函数并不能揭示现实生活中的含义,特别是对于未来的编码习惯。

任何帮助表示感谢。感谢。

4 个答案:

答案 0 :(得分:2)

1)is_resource()函数告诉您是否给定了资源类型的变量 你从任何“PHPacademy”获得的代码并不是更好。它使用的是@die()$conn_error等奇怪的东西,其中前两个根本不应该被使用,后一个不能在任何地方定义。
它至少应该是

if (!mysql_connect($server, $user, $pass) || !mysql_select_db($db)) _503();

其中_503()是一个发送适当的HTTP状态代码并输出一些预定义错误页面的函数 如果您使用的是站点范围的错误处理程序,您可能只是省略了这个条件,将函数保持原样 - 最干净的方式:

mysql_connect($server, $user, $pass);
mysql_select_db($db);

2)我怀疑是否有任何好处。 $ hasDB显然是一个布尔变量,告诉你是否有DB。对我来说似乎也没用。但是,您必须要求此代码的作者获得一定的答案 不过你可以使用mysql_connect()返回值作为这样的标志变量。

3)只有了解OOP才有效。在这种情况下,通常会更好。

答案 1 :(得分:1)

1 + 2)该函数返回资源或false,因此检查一个就像另一个一样好。

3)只有使用OOP才有意义。

答案 2 :(得分:1)

1)mysql_connect()将返回资源,或者失败时返回false。如果mysql_connect()成功,使用is_resource()是一种测试的方法。

3)使用OOP连接数据库并创建一些类/实例不是更好的主意吗?

如果您已经熟悉其他语言的OOP,我肯定会根据您的需要建议您这样做。一个好的开始方法是使用PHP框架。

答案 3 :(得分:0)

保持简单的老兄。为什么要在会话中包装数据库并输出缓冲?就我而言,is_resource是无关的和多余的 - 你真的只需要确保数据库连接不是假的(否则它总是返回一个资源)。 php.net mysql_connect函数工作正常,并提供了完整的示例:

<?php
$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
if (!$link) {
    die('Could not connect: ' . mysql_error());
}
echo 'Connected successfully';
mysql_close($link);
?>

http://php.net/manual/en/function.mysql-connect.php

欢迎使用StackOverflow。