请考虑以下代码:
<?php
$conn = mysql_connect('localhost', 'username', 'password');
mysql_select_db('database', $conn);
?>
Run Code Online (Sandbox Code Playgroud)
这可以按预期工作,但PHP如何知道mysql_select_db()在以下示例中调用时要使用的数据库连接?
<?php
mysql_connect('localhost', 'username', 'password');
mysql_select_db('database');
?>
Run Code Online (Sandbox Code Playgroud)
PHP文档声明"如果未指定链接标识符,则假定mysql_connect()打开的最后一个链接." (PHP:mysql_select_db())
存储或检索的最后一个连接在哪里?
Pas*_*TIN 11
我想最后打开的连接的链接保存在内存中,以使事情变得更容易(因为我们通常只使用一个连接).
快速浏览以下内容ext/mysql:(
所有行号都在php_mysql.c- 源代码的版本是几周前PHP 5.3.2-dev的随机快照;因此,它们可能有所改变)
mysql_connect似乎对应于调用的C级函数(第922行)php_mysql_do_connect php_mysql_do_connect函数调用(线832)php_mysql_set_default_link
php_mysql_get_default_link php_mysql_get_default_link函数被调用(第992行)mysql_select_db
并php_mysql_set_default_link呼吁这存储default_link:
MySG(default_link) = id;
Run Code Online (Sandbox Code Playgroud)
这MySG是一个宏,定义如下(in php_mysql_structs.h):
#ifdef ZTS
# define MySG(v) TSRMG(mysql_globals_id, zend_mysql_globals *, v)
#else
# define MySG(v) (mysql_globals.v)
#endif
Run Code Online (Sandbox Code Playgroud)
对我来说,几乎看起来像一个全局变量;-)
如果你愿意,你可以自己看一下这些来源:ext/mysql/php_mysql.c和ext/mysql/php_mysql_structs.h.
正如我所说,自从我检查的版本以来,这可能已经被修改了一些 - 这意味着行号可能不完全匹配; 但功能名称很容易理解,所以你应该能够找到什么叫什么和在哪里:-)
| 归档时间: |
|
| 查看次数: |
424 次 |
| 最近记录: |