这是一道古老的题目
请看代码,数据库关闭指令将关闭哪个连接标识?( )
$link1 =mysql_connect("localhost","root",""); $link2 = mysql_connect("localhost","root",""); mysql_close();
A.$link1
B.$link2
C.全部关闭
D.报错
根据知识储备,mysql_close在未指定连接标识时,是就近原则。
手册上也有说明
mysql_close() closes the non-persistent connection to the MySQL server that's associated with the specified link identifier. If link_identifier isn't specified, the last opened link is used.
所以答案应该是B。
再想想,似乎有哪里漏了,
If a second call is made to mysql_connect() with the same arguments, no new link will be established, but instead, the link identifier of the already opened link will be returned.
那么两次connect打开的应该是同一个连接标识,那么应该是一起关闭了吧?
所以选C???
没错,我就是闲的蛋疼,要挣扎着纠结这一个将要被淘汰的函数。于是又验证了一下。
$link1 = mysql_connect('localhost','root',''); $link2 = mysql_connect('localhost','root',''); print_r($link1); print_r($link2);//$link1和$link2一样,第二次未创建新连接,返回已经打开的连接标识 mysql_close(); //下面可以正常打test库里表都打印出来 mysql_select_db('test',$link2); $rs = mysql_query('show tables;',$link2); while ($row = mysql_fetch_assoc($rs)) { print_r($row); echo "<br />"; } //这个当然也能 mysql_select_db('test',$link1); $rs = mysql_query('show tables;',$link1); while ($row = mysql_fetch_assoc($rs)) { print_r($row); echo "<br />"; }
没错,mysql_close()谁也没关闭。
实际上,如果把mysql_close();修改为
<code>mysql_close($link1); 或者 mysql_close($link2);</code>
下面$link1,$link2仍然都是有效的
如果真要close,只有这样才好使,
mysql_close($link1); mysql_close($link2);
两个一起close。
这是为什么呢?为什么呢?
回复内容:
这是一道古老的题目
请看代码,数据库关闭指令将关闭哪个连接标识?( )
$link1 =mysql_connect("localhost","root",""); $link2 = mysql_connect("localhost","root",""); mysql_close();
A.$link1
B.$link2
C.全部关闭
D.报错
根据知识储备,mysql_close在未指定连接标识时,是就近原则。
手册上也有说明
mysql_close() closes the non-persistent connection to the MySQL server that's associated with the specified link identifier. If link_identifier isn't specified, the last opened link is used.
所以答案应该是B。
再想想,似乎有哪里漏了,
If a second call is made to mysql_connect() with the same arguments, no new link will be established, but instead, the link identifier of the already opened link will be returned.
那么两次connect打开的应该是同一个连接标识,那么应该是一起关闭了吧?
所以选C???
没错,我就是闲的蛋疼,要挣扎着纠结这一个将要被淘汰的函数。于是又验证了一下。
$link1 = mysql_connect('localhost','root',''); $link2 = mysql_connect('localhost','root',''); print_r($link1); print_r($link2);//$link1和$link2一样,第二次未创建新连接,返回已经打开的连接标识 mysql_close(); //下面可以正常打test库里表都打印出来 mysql_select_db('test',$link2); $rs = mysql_query('show tables;',$link2); while ($row = mysql_fetch_assoc($rs)) { print_r($row); echo "<br />"; } //这个当然也能 mysql_select_db('test',$link1); $rs = mysql_query('show tables;',$link1); while ($row = mysql_fetch_assoc($rs)) { print_r($row); echo "<br />"; }
没错,mysql_close()谁也没关闭。
实际上,如果把mysql_close();修改为
<code>mysql_close($link1); 或者 mysql_close($link2);</code>
下面$link1,$link2仍然都是有效的
如果真要close,只有这样才好使,
mysql_close($link1); mysql_close($link2);
两个一起close。
这是为什么呢?为什么呢?
楼主的测试很赞,确实如此,mysql_connect返回的肯定是一个引用,如楼主的测试说明该句柄不但有一个变量引用而且还有一个句柄引用(我自己随便命名的),mysql_close的时候释放句柄引用,然后检查该变量的所有句柄引用是不是都被释放了,如果是的话则对该变量进行内存回收处理。例如
<code>$a = 'Hello'; $b = &$a; $c = &$a; unset($a); echo $b . $c; //HelloHello 而不是 null</code>
这个测试代码说明了内存回收关于引用的处理,所以推测mysql_close也是类似的处理,但是与unset的管理目标是不同的(例如unset管理的是内存指针,mysql_close管理的是连接句柄指针?)
不过貌似研究这个已经完全没有价值了,相同的事情在mysqli系列函数上不会发生:
<code><?php $link1 = mysqli_connect('localhost', 'root'); $link2 = mysqli_connect('localhost', 'root'); mysqli_close($link1); print_r(mysqli_get_host_info($link1)); print_r(mysqli_get_host_info($link2));</code></code>
而且php5已经抛弃了mysql系列函数,因此就算是bug或者不良问题也不会被修复了,调用mysql_connect时应该能看到警告信息:该系列函数将会在未来停止使用。
感谢@incNick 回答,已采纳答案。
另外补充一些内容
就算只有有一个连接的情况
$link1 = mysql_connect('localhost','root',''); $result = mysql_close(); var_dump($result); mysql_select_db('test',$link1 ); $rs = mysql_query('show tables;',$link1 ); while ($row = mysql_fetch_assoc($rs)) { print_r($row); echo "<br />"; }
mysql_close()在未指定link_identifier的时候,返回结果是true,
Returns TRUE on success or FALSE on failure.
表示关闭成功,但实际其实也是没有关闭的,依然能依次打印库里的表,该连接可以使用。
所以说有时间手册也挺害人的。
mysqli_close(),在未指定link_identifier的情况下执行结果是false。
在多个连接的情况下,在指定link_identifier的情况下,可单独关闭$link1,$link2。
综上,link_identifier是必需的!!!!
现在不是用pdo,mysqli了么,mysql_connect 之类的不鼓励使用了

PHP仍然流行的原因是其易用性、靈活性和強大的生態系統。 1)易用性和簡單語法使其成為初學者的首選。 2)與web開發緊密結合,處理HTTP請求和數據庫交互出色。 3)龐大的生態系統提供了豐富的工具和庫。 4)活躍的社區和開源性質使其適應新需求和技術趨勢。

PHP和Python都是高層次的編程語言,廣泛應用於Web開發、數據處理和自動化任務。 1.PHP常用於構建動態網站和內容管理系統,而Python常用於構建Web框架和數據科學。 2.PHP使用echo輸出內容,Python使用print。 3.兩者都支持面向對象編程,但語法和關鍵字不同。 4.PHP支持弱類型轉換,Python則更嚴格。 5.PHP性能優化包括使用OPcache和異步編程,Python則使用cProfile和異步編程。

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。

PHP起源於1994年,由RasmusLerdorf開發,最初用於跟踪網站訪問者,逐漸演變為服務器端腳本語言,廣泛應用於網頁開發。 Python由GuidovanRossum於1980年代末開發,1991年首次發布,強調代碼可讀性和簡潔性,適用於科學計算、數據分析等領域。

PHP適合網頁開發和快速原型開發,Python適用於數據科學和機器學習。 1.PHP用於動態網頁開發,語法簡單,適合快速開發。 2.Python語法簡潔,適用於多領域,庫生態系統強大。

PHP在現代化進程中仍然重要,因為它支持大量網站和應用,並通過框架適應開發需求。 1.PHP7提升了性能並引入了新功能。 2.現代框架如Laravel、Symfony和CodeIgniter簡化開發,提高代碼質量。 3.性能優化和最佳實踐進一步提升應用效率。

PHPhassignificantlyimpactedwebdevelopmentandextendsbeyondit.1)ItpowersmajorplatformslikeWordPressandexcelsindatabaseinteractions.2)PHP'sadaptabilityallowsittoscaleforlargeapplicationsusingframeworkslikeLaravel.3)Beyondweb,PHPisusedincommand-linescrip

PHP類型提示提升代碼質量和可讀性。 1)標量類型提示:自PHP7.0起,允許在函數參數中指定基本數據類型,如int、float等。 2)返回類型提示:確保函數返回值類型的一致性。 3)聯合類型提示:自PHP8.0起,允許在函數參數或返回值中指定多個類型。 4)可空類型提示:允許包含null值,處理可能返回空值的函數。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Dreamweaver Mac版
視覺化網頁開發工具

記事本++7.3.1
好用且免費的程式碼編輯器

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。