-
mysqli預處理語句查看全部
-
6. 查詢 $sql=“SELECT id,username,password,email FROM user”; $res=mysqli_query($link,$sql); //echo mysqli_num_rows($res); if($res && mysqli_num_rows($res)>0){ while($row=mysqli_fetch_array($result,MYSQLI_ASSOC)){ //print_r($row); $rows[]=$row; } } print_r($rows); mysqli_free_result($res); //釋放結果集 7. 關閉連接 mysqli_close($link);查看全部
-
4. 更新 $sql=“UPDATE user SET age=age+10 WHERE id=12;”; $sql.=“DELETE FROM user WHERE id=13”; $res=$mysqli_multi_query($link,$sql); var_dump($res); echo ‘<hr/>’; 5. 預處理語句 $sql=“INSERT user(username,password,age) VALUES(?,?,?)”; $stmt=$mysqli_prepare($link,$sql); $username=“abc”; $password=“123”; $age=“12”; mysqli_stmt_bind_param($stmt, ‘ssi’, $username,$password,$age); mysqli_stmt_execute($stmt);查看全部
-
<?php //1.連接 $link = mysqli_connect(‘localhost’,’root’,’root’,’test’) or die(‘Connect Error:’.mysqli_connect_errno().”:”.mysqli_connect_error()); //2.編碼 mysqli_set_charset($link,’UTF8’); //3.查詢 $sql=“INSERT user(username,password,age) VALUES(‘a’,’a’,11);”; $res=$mysqli_query($link,$sql); if($res){ echo ‘AUTO_INCREAMENT:’.$mysqli_insert_id($link); echo ‘<hr/>’; echo ‘AFFECTED_ROWS:’.$mysqli_affected_rows($link); }else{ echo ‘ERROR:<br/>’; echo mysqli_errno($link).”:”.mysqli_error($link); } print_r($link); ?>查看全部
-
$sql="SELECT username,email,url,face,content,pubTime FROM comments"; $mysqli_result=$mysqli->query($sql); if($mysqli_result&& $mysqli_result->num_rows>0){ while($row=$mysqli_result->fetch_assoc()){ $comments[]=new Comment($row); } } 將用戶提交的信息轉換為json數據并提交給文件doAction.php,用戶輸入信息有誤等信息的顯示,都是由javascript完成查看全部
-
$res=Comment::validate($arr); //數據在自定義類方法中獲取,過濾,保存 //json_encode()對變量進行JSON編碼,json_decode()對JSON格式的字符串進行轉換為PHP變量. $comment的output()方法 public function output(){ if($this->data['url']){ $link_start="<a href='".$this->data['url']."' target='_blank'>"; //a標簽分開寫是為了能在a標簽中插入其他元素 $link_end="</a>"; } $dateStr=date("Y年m月d日 H:i:s",$this->data['pubTime']); $res=<<<EOF <div class='comment'> <div class='face'> {$link_start} <img width='50' height='50' src="img/{$this->data['face']}.jpg" alt="" /> {$link_end} </div> <div class='username'> {$link_start} {$this->data['username']} {$link_end} </div> <div class='date' title='發布于{$dateStr}'> {$dateStr} </div> <p>{$this->data['content']}</p> </div> EOF; return $res; }查看全部
-
//2.2過濾用戶輸入的特殊字符 public static function validate_str($str){ if(mb_strlen($str,'UTF8')<1){ //以UTF8格式獲取字符串的長度獲取字符串長度 return false; } //htmlspecialchars把預定義的字符轉換為HTML實體,ENT_QUOTES為編碼$str內的雙引號和單引號 //nl2br()在字符串中的每個新行(\n)之前插入 HTML 換行符(<br> 或 <br />) $str=nl2br(htmlspecialchars($str,ENT_QUOTES)); return $str; }查看全部
-
2.程序分析 //2.1檢測用戶輸入的數據 public static function validate(&$arr){ //&為引用聲明:&$arr if(!($data['email']=filter_input(INPUT_POST,'email',FILTER_VALIDATE_EMAIL))){ $errors['email']='請輸入合法郵箱'; } if(!($data['url']=filter_input(INPUT_POST,'url',FILTER_VALIDATE_URL))){ $url=''; } //過濾函數的回調函數,函數名必須存入名為 "options" 的關聯數組中 if(!($data['content']=filter_input(INPUT_POST,'content',FILTER_CALLBACK,array('options'=>'Comment::validate_str')))){ $errors['content']='請輸入合法內容'; } //過濾標準的相應參數必須存入一個名為 "options" 的關聯多維數組中。 $int_options=array( 'options'=>array( //FILTER_VALIDATE_INT對應參數 'min_range'=>1, //min_range - 規定最小整數值 'max_range'=>5 //max_range - 規定最大整數值 ) ); if(!($data['face']=filter_input(INPUT_POST,'face',FILTER_VALIDATE_INT,$int_options))){ $errors['face']='請選擇合法頭像'; } if(!empty($errors)){ $arr=$errors; return false; } $arr=$data; $arr['email']=strtolower(trim($arr['email'])); //strtolower()將字符串轉換成小寫 trim()去掉前后空格 return true; }查看全部
-
1.php5.4起支持回調函數 1).函數做回調函數,以 string 類型傳遞其名稱。()可以使用任何內置或用戶自定義函數,但不能使用語言結構(如:array(),echo,empty(),eval(),exit(),isset(),list(),print 或 unset() )函數 2).一個已實例化的對象的方法被作為數組傳遞,下標 0 包含該對象,下標 1 包含方法名。 3).靜態類方法也可不經實例化該類的對象而傳遞,只要在下標 0 中包含類名而不是對象。自 PHP 5.2.3 起,也可以傳遞 'ClassName::methodName'。 function my_callback_function() { echo 'hello world!'; } class MyClass { static function myCallbackMethod() { echo 'Hello World!'; } } //函數做回調函數 call_user_func('my_callback_function'); //靜態方法做為回調函數 call_user_func(array('MyClass', 'myCallbackMethod')); call_user_func('MyClass::myCallbackMethod'); // 對象方法做回調函數 $obj = new MyClass(); call_user_func(array($obj, 'myCallbackMethod')); filter_input()為幾大過濾函數之一的:獲取腳本外數據并進行字符合法化過濾函數. filter_input(INPUT_POST,'email',FILTER_VALIDATE_EMAIL) filter_input()參數說明:第一個參數表示調用的數據是外部通過POST方法傳輸過來,第二個參數表明從$_POST[email]中取得具體數據,第三個參數說明具體過濾標準,第四個參數為具體過濾標準的相應參數(可省略)查看全部
-
用php中的mysqli庫實現: //先關閉自動提交功能 $mysqli->autocommit(FALSE); $sql="UPDATE account SET money=money-200 WHERE username='king'"; $res=$mysqli->query($sql); $res_affect=$mysqli->affected_rows; $sql1='UPDATE account SET money=money+200 WHERE username="queen"'; $res1=$mysqli->query($sql1); $res1_affect=$mysqli->affected_rows; if($res &&$res_affect>0 && $res1 && $res1_affect>0){ //判斷是否所有語句都運行正確 $mysqli->commit(); //提交系統執行 echo '轉賬成功<br/>'; $mysqli->autocommit(TRUE); //恢復自動提交功能 }else{ $mysqli->rollback(); //回滾到自動事務初始狀態(這個函數還有$mysqli->autocommit(TRUE)的功能) echo '轉賬失敗<br/>'; }查看全部
-
MySQLi中使用預處理語句執行查詢語句 $sql="SELECT id,username,age FROM user WHERE id>=?"; $mysqli_stmt=$mysqli->prepare($sql); $id=20; $mysqli_stmt->bind_param('i',$id); if($mysqli_stmt->execute()){ //bind_result():綁定結果集中的值到變量,必須與查詢結果字段一一對應 $mysqli_stmt->bind_result($id,$username,$age); //遍歷結果集 //如果調用$mysqli_stmt->store_result()將數據先按照一定的格式存儲,則可調用$mysqli_stmt->data_seek()來控制輸出那一條記錄 while($mysqli_stmt->fetch()){ echo '編號:'.$id,'<br/>'; echo '用戶名:'.$username,'<br/>'; echo '年齡:'.$age.'<br/>'; echo '<hr/>'; } } $mysqli_stmt->free_result(); $mysqli_stmt->close(); $mysqli->close();查看全部
-
1.注入的解釋: //如果 $name="'or 1=1#"; $pwd=md5("123123"); $sql="select * from users where username='$name' and password='$pwd'"; //則以上的SQL語句會被php解析為: select * from users where username='' or 1=1#' and password=md5('123123') 因為“#”在mysql中是注釋符,這樣井號后面的內容將被mysql視為注釋內容,這樣SQL語句就變成了: select * from users where username='' or 1=1 因為1永遠=1,所以where條件永遠真,則結果就相當于select * from users 2.因為預定義在$mysqli_stmt=$mysqli->prepare($sql);時已經將SQL模板傳遞給mysql數據庫并讓數據庫系統做語句分析,之后的傳遞參數將不對SQL語句做分析,所以不會出現上面所說的注入. 3.獲得結果集 $mysqli_stmt->store_result(); 4.當查詢語句返回的是結果集時,會因為在內存中存儲結果集而占用空間,所以在之后不需要相應結果集的情況下釋放結果集,回收內存空間. //釋放結果集 $mysqli_stmt->free_result(); 5.關閉預處理語句 $mysqli_stmt->close(); $mysqli->close();查看全部
-
1.預處理工作流程 //定義SQL語句模板(用?做為占位符) $sql="INSERT user(username,password,age) VALUES(?,?,?)"; //將查詢傳給mysql預處理,返回一個mysqli_stmt類對象 $mysqli_stmt=$mysqli->prepare($sql); //此時mysql會解析查詢,但不會執行。 $username='king'; $password=md5('king'); $age=12; //將變量綁定到查詢占位符(s代表字符串,i代表整數,d代表浮點數,b代表布爾值) $mysqli_stmt->bind_param('ssi',$username,$password,$age); //執行預處理語句 if($mysqli_stmt->execute()){ echo $mysqli_stmt->insert_id; echo '<br/>'; }else{ $mysqli_stmt->error; } //之后只用修改變量值與執行即可重復使用預處理(不需要從新在此綁定參數$mysqli_stmt->bind_param()) $username='king1'; $password=md5('king1'); $age=22; $mysqli_stmt->execute(); 2.相比于直接執行SQL語句,預處理語句有三個主要優點: 1).預處理語句大大減少了分析時間,值在$mysqli_stmt=$mysqli->prepare($sql);時mysql會分析語句. 2).綁定參數減少了服務器帶寬,你只需要發送查詢的參數,而不是整個語句。 3).預處理語句針對SQL注入是非常有用的,因為參數值發送后使用不同的協議,保證了數據的合法性。查看全部
-
//取得結果集中的一條記錄,作為對象返回 $row=$mysqli_result->fetch_object(); //移動結果集內部指針(結果集內通過這個指針來確定返回那一條記錄) $mysqli_result->data_seek(0);//指針從0開始計數 while($row=$mysqli_result->fetch_assoc()){ $rows[]=$row; } //釋放結果集,回收內存地址 $mysqli_result->free(); } //關閉數據庫連接 $mysqli->close();查看全部
-
$sql="SELECT id,username,age FROM user"; $mysqli_result=$mysqli->query($sql); //此時$mysqli->query()返回的是一個結果集對象,用變量$mysqli_result接收 if($mysqli_result && $mysqli_result->num_rows>0){ //echo $mysqli_result->num_rows; //顯示記錄數 //獲取結果集中所有記錄,默認返回的是二維的數組(索引+索引的形式) //$rows=$mysqli_result->fetch_all(); //不同的參數返回不同形式的數組(都是獲取結果集中所有記錄) $rows=$mysqli_result->fetch_all(MYSQLI_NUM); //返回索引數組 $rows=$mysqli_result->fetch_all(MYSQLI_ASSOC);//返回關聯數組 $rows=$mysqli_result->fetch_all(MYSQLI_BOTH); //返回索引數組與關聯數組 //每次只能去一條記錄 $row=$mysqli_result->fetch_row();//取得結果集中一條記錄作為索引數組返回(=mysql_fetch_row();) $row=$mysqli_result->fetch_assoc();//取得結果集中的一條記錄作為關聯數組返回(=mysql_fetch_assoc();) //取得結果集中的一條記錄,不同的參數返回不同形式的數組(=mysql_fetch_array();) $row=$mysqli_result->fetch_array();//默認以關聯數組和索引數組兩種方式返回 $row=$mysqli_result->fetch_array(MYSQLI_ASSOC); //MYSQLI_ASSOC返回關聯數組, MYSQLI_NUM返回索引數組, MYSQLI_BOTH返回索引數組與關聯數組查看全部
舉報
0/150
提交
取消