PHP中mysqli_affected_rows與mysqli_num_rows的區別
今天寫專案的時候用PHP搭了一個介面用于用戶登錄注冊,登錄我是這么寫的
<?php
$username = $_POST['username'];
$password = $_POST['password'];
$con = mysqli_connect('localhost','root','root','hubayi');
$sql = "select * from users where name='$username' and password='$password'";
$res = mysqli_query($con,$sql);
$num = mysqli_num_rows($res);
if($num > 0) {
setcookie('login',1,time() + 60 * 60,'/',NULL,NULL);
$arr = array('error' => 0,'data' => '成功');
}else {
$arr = array('error' => 1, 'data' => '失敗','text' => $password);
}
echo json_encode($arr);
?>
在這個檔案中我是用mysqli_num_rows獲取受影響行數的,這個是沒問題的,可以運行,于是我就比著葫蘆畫瓢,又寫了一個注冊
<?php
$username = $_POST['username'];
$password = $_POST['password'];
$con = mysqli_connect('localhost','root','root','hubayi');
$sql = "INSERT INTO users(name,password) VALUES('$username','$password')";
$res = mysqli_query($con,$sql);
$num = mysqli_affected_rows($res);
if($num > 0) {
$arr = array('error' => 0,'data' => '注冊成功');
} else {
$arr = array('error' => 1,'data' => '注冊失敗');
}
echo json_encode($arr);
?>
然而這個代碼就給我報錯了,
mysqli_affected_rows() expects parameter 1 to be mysqli, bool given in <b>E:\phpstudy_pro\WWW\link\zhuce.php</b> on line <b>7</b><br />
就是這個錯,以前我也遇到過,一般都是sql陳述句寫錯了,于是我研究一大會子也沒看出來我這個sql陳述句哪錯了,然后我就把mysqli_affected_rows()這個函式換成了mysqli_num_rows,于是又給我報這個錯
mysqli_num_rows() expects parameter 1 to be mysqli_result
然后我就蒙圈了,你說我一個搞前端的,玩兒啥PHP啊,本著一個對代碼的熱愛還是把這個問題搞明白了,
mysqli_num_rows()這個函式只用于SELECT查詢方法,而mysqli_affected_rows()函式是記錄上一個sql陳述句對整個資料庫的影響從而把受影響的資料個數回傳,這個主要用于INSERT(插入)、UPDATE(替換)、DELETE(洗掉),
重點來了,這兩個函式所需引數不是一樣的,我就吃了這個虧,傳的都是sql陳述句執行的結果也就是上邊代碼的
$res = mysqli_query($con,$sql);
每次都傳res,當然在mysqli_num_rows()是沒問題的,因為mysqli_num_rows()需要就是這個結果,但是mysqli_affected_rows()就不一樣了,他需要的是$con,也就是
$con = mysqli_connect('localhost','root','root','hubayi');
他需要一個mysql作為一個引數,就是這個資料庫,他需要記錄上一個sql陳述句對整個資料庫的影響,以上就是我的理解,龍伏白威!
對前端感興趣的小伙伴可以加我QQ:1627889159
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/260653.html
標籤:其他
