2013-03-13 101 views
1

中声明一个函数作为变量我开始学习php和我的问题,理解在很多情况下函数被定义为变量。任何人都可以解释我它是什么和例子背后的实际目的:为什么在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是不以任何下列代码使用这个代码是完全连接到数据库,并做的工作。什么是替代方式来帮助我更好地理解它。我一直在网上搜索,但找不到任何有用的答案 在此先感谢。

+3

以学习[PDO](http://php.net/pdo)开始。 – 2013-03-13 07:53:40

+3

这不是“将函数声明为变量”,它只是将函数的返回值赋给变量。显然这是没有必要的,因为它从来没有用过,就像你说的那样。 – deceze 2013-03-13 07:55:31

+0

你有什么具体的不明白?你能说出来吗? – hakre 2013-03-13 07:56:42

回答

3

序言:mysql扩展标记为已弃用。对于新的脚本和esp。得知PHP /数据库的东西,请选择另一个MySQL API时,看到http://docs.php.net/mysqlinfo.api.choosing


分配给$dbmysql_connect()返回值是不是一个功能,但MySQL连接资源。您可以并且应该将它传递给后续调用mysql_select_db(..., $db),mysql_real_escape_string(..., $db),mysql_query(..., $db),mysql_error($db)(除了直接在mysql_connect之后)等。
由mysql_connect建立的最后一个连接存储在扩展中的“内部”。如果在拨打电话时离开链接参数, mysql_query()扩展将使用最后一次连接。但是,如果没有存储有效的链接,它也“允许”分机建立新的默认连接,请参见mysql.default_*,网址为http://docs.php.net/mysql.configuration
因此,例如如果你有一个脚本没有正确的错误处理和不通过链路资源的后续函数调用像

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

它可能实际上是“工作”,而是把数据放到不同的MySQL服务器比你打算做的事。
因此,总是要安装适当的错误处理(无论您的上下文中的“正确”意味着什么),并始终将链接资源传递给mysql_ *函数。

<?php 
checkParameters() or onParameterError(); 
$db = mysql_connect('server1', ..., ...) or onMyErrorHandler(null); 
mysql_select_db('somedatabase', $db) or onMyErrorHandler($db); 
$param = mysql_real_escape_string($_POST['value'], $db); 
$result = mysql_query('INSERT INTO ....', $db) or onMyErrorHandler($db); 
+0

不需要使用虚构的onMyErrorHandler()。使用trigger_error()代替。它会更好地为您服务 – 2013-03-13 08:07:39

+0

感谢您的意见:我会补充一点,实际的错误处理是另一个话题(一个人可以写一本书......哦,等等,人们在这个问题上写下书籍; - ))并没有在这里介绍。我非常想知道不想把那些平常的或死的DIE教程快捷方式放在那里。 – VolkerK 2013-03-13 08:15:35

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会更好。