为什么在php中将函数声明为变量

时间:2013-03-13 07:51:16

标签: php function variables

我开始学习php和我的问题,理解在很多情况下函数被定义为变量。任何人都可以解释一下它背后的实际目的和例子:

$db_name= "testdb";
$table_name= "my_music";
// below we create the connection to the database.
$connection= @mysql_connect("localhost", "myusername", "mypassword") or die(mysql_error());
// below we are gonna define what database to connect.

$db= @mysql_select_db($db_name, $connection) or die(mysql_error());

//below creates the sql statement so it can insert the data into the table.

$sql= "
INSERT INTO $table_name
(format, title, artist_fn, artist_ln, rec_label, my_notes, date_acq) 
VALUES 
('$format', '$title', '$artist_fn', '$artist_ln', '$rec_label', '$my_notes', '$date_acq')";

//below is the function that holds the result of the query function
$result= @mysql_query($sql, $connection) or die(mysql_error());
 // end of the php for inserting data into database.
?>

如您所见,$db未在以下任何代码中使用,此代码完美地连接到数据库并完成工作。什么是帮助我更好地理解它的替代方法。我一直在互联网上搜索,但找不到任何有用的答案 提前谢谢。

2 个答案:

答案 0 :(得分:3)

序言:mysql扩展名被标记为已弃用。对于新脚本和esp。在学习php / database的时候请选择另一个mysql api,参见http://docs.php.net/mysqlinfo.api.choosing


分配给mysql_connect()的{​​{1}}的返回值不是函数,而是mysql连接资源。您可以而且应该将其传递给后续调用$dbmysql_select_db(..., $db)mysql_real_escape_string(..., $db)mysql_query(..., $db)(直接在mysql_connect之后),等等。 mysql_connect建立的最后一个连接存储在扩展名“内”。如果您在调用时保留link参数mysql_query()扩展将使用此最后一个连接。但如果没有存储有效链接,它也“允许”扩展程序建立新的默认连接,请参阅http://docs.php.net/mysql.configuration上的mysql_error($db)。 所以例如如果您的脚本没有正确的错误处理,并且没有将链接资源传递给后续的函数调用,如

mysql.default_*

它可能实际上“工作”,但将数据放入不同于您预期的MySQL服务器中 因此,始终安装正确的错误处理(在您的上下文中“适当”意味着什么)并始终将链接资源传递给mysql_ *函数。

<?php
mysql_connect('server1', ..., ...);
mysql_select_db('somedatabase');
mysql_query('INSERT INTO ....');

答案 1 :(得分:3)

$db= @mysql_select_db($db_name, $connection) or die(mysql_error());

在此处,此处mysql_select_db()(布尔值)的结果已分配$db。正如你正确地指出的那样,它没有在代码中进一步使用,因此语句可以写成:

@mysql_select_db($db_name, $connection) or die(mysql_error());

请注意,建议不要使用error control operator,了解error logging以及如何避免使用这些or die()构造。

此外,也不应使用旧的mysql_函数;最好学习PDOmysqli