1

我开始学习 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的,未在任何以下代码中使用,并且此代码完美地连接到数据库并完成了工作。有什么替代方法可以帮助我更好地理解它。我一直在互联网上搜索它,但找不到任何有用的答案提前谢谢。

4

2 回答 2

3

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


mysql_connect()赋值给的返回值$db不是函数而是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);
于 2013-03-13T08:01:06.330 回答
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());

请注意,不建议使用错误控制运算符,了解错误日志以及如何避免这些or die()构造。

mysql_此外,也不应该使用旧功能;最好学习PDOmysqli

于 2013-03-13T08:02:16.067 回答