![](/img/trans.png)
[英]Whats the proper way to check if mysql_query() returned any results?
[英]Best way to check if mysql_query returned any results?
我正在尋找檢查並查看查詢中是否返回任何結果的最佳方法。 我覺得這部分代碼我寫了很多,有時我會出錯,有時我不會。
例如,我運行此查詢以在將新用戶名插入數據庫之前檢查用戶名是否存在。
$result = mysql_query("SELECT * FROM ...");
然后我想檢查一下是否返回了任何結果。 這是我這樣做的一種方法:
if (!$result) { PERFORM ACTION }
如果第一種方法不起作用,那么有時會:
if (mysql_num_rows($result)==0) { PERFORM ACTION }
然后我什至有一天看到我可以這樣做:
list($total) = mysql_fetch_row($result);
if ($total==0) { PERFORM ACTION }
做這個的最好方式是什么?
if (mysql_num_rows($result)==0) { PERFORM ACTION }
對於 PHP 5 和 7 及以上版本,請使用 mysqli:
if (mysqli_num_rows($result)==0) { PERFORM ACTION }
一種方法是檢查mysql_num_rows
返回什么。 一個最小的完整示例如下:
if ($result = mysql_query($sql) && mysql_num_rows($result) > 0) {
// there are results in $result
} else {
// no results
}
但建議您檢查mysql_query
的返回值,如果為false
(可能是錯誤導致),請妥善處理; 可能還通過調用mysql_error
並在某處記錄錯誤。
每當我們進行查詢以獲取某些數據時,它都會作為對象返回。 然后我們大多數人將其轉換為數組,以便輕松遍歷行。 在 php 中,“empty()”函數用於檢查數組是否為空,即其中是否沒有數據。 所以我們可以通過這樣做來檢查查詢的返回數組表示是否為空
if(!empty($result)){
//DO STUFF
}
有什么比在處理之前測試結果變量的 TYPE 更合乎邏輯? 它是“布爾值”或“資源”類型。 當您對 mysqli_num_rows 參數使用布爾值時,將生成警告,因為該函數需要資源。
$result = mysqli_query($dbs, $sql);
if(gettype($result)=='boolean'){ // test for boolean
if($result){ // returned TRUE, e.g. in case of a DELETE sql
echo "SQL succeeded";
} else { // returned FALSE
echo "Error: " . mysqli_error($dbs);
}
} else { // must be a resource
if(mysqli_num_rows($result)){
// process the data
}
mysqli_free_result($result);
}
$connect = new mysqli('localhost', 'user', 'password', 'db');
$result = $connect->query("select * from ...");
$count=$result->num_rows;
if(empty($count)){
echo"Query returned nothing";
}
else{
echo"query returned results";
}
如果沒有行, mysqli_fetch_array()
返回NULL
。
在程序風格中:
if ( ! $row = mysqli_fetch_array( $result ) ) {
... no result ...
}
else {
... get the first result in $row ...
}
在面向對象的風格中:
if ( ! $row = $result->fetch_array() ) {
...
}
else {
... get the first result in $row ...
}
在上述所有選項中,我會使用
if (mysql_num_rows($result)==0) { PERFORM ACTION }
檢查結果如下
if (!$result) { PERFORM ACTION }
如果 mysql_error 如此有效地發生,如果發生錯誤,您可以輸入重復的用戶名,那么這將是正確的...
與mysql_fetch_row
一起使用,因為“對於 SELECT、SHOW、DESCRIBE、EXPLAIN 和其他返回結果集的語句,mysql_query() 在成功時返回資源,或者在錯誤時返回 FALSE。
對於其他類型的 SQL 語句,INSERT、UPDATE、DELETE、DROP 等,mysql_query() 在成功時返回 TRUE,在錯誤時返回 FALSE。 ”
if (mysql_num_rows($result)!=0) { PERFORM ACTION }
這樣,如果結果是肯定的,您檢查並執行操作(您的數據庫中有一條與您的查詢匹配的記錄),另一種方式(== 0)您在未給出結果時執行了該操作。
$result = $mysqli->query($query);
if($result){
perform action
}
我就是這樣做的,你也可以用一個骰子扔一個 else ......
如果您仍想在$result
無效的情況下執行該操作:
if(!mysql_num_rows($result))
// Do stuff
這將說明0
和mysql_num_rows()
在失敗時返回的false
。
通常我使用===
( 三重等號)和__LINE__
、 __CLASS__
來定位我的代碼中的錯誤:
$query=mysql_query('SELECT champ FROM table')
or die("SQL Error line ".__LINE__ ." class ".__CLASS__." : ".mysql_error());
mysql_close();
if(mysql_num_rows($query)===0)
{
PERFORM ACTION;
}
else
{
while($r=mysql_fetch_row($query))
{
PERFORM ACTION;
}
}
if (mysql_num_rows($result)>0) { PERFORM ACTION }
if ($result) { PERFORM ACTION }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.