phppdo大數(shù)據(jù) php轉(zhuǎn)大數(shù)據(jù)

php中用參數(shù)傳遞的pdo查詢語句怎么寫

方法 bindParam() 和 bindValue() 非常相似。

10年積累的網(wǎng)站設計、成都網(wǎng)站設計經(jīng)驗,可以快速應對客戶對網(wǎng)站的新想法和需求。提供各種問題對應的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡服務。我雖然不認識你,你也不認識我。但先網(wǎng)站設計后付款的網(wǎng)站建設流程,更有洛陽免費網(wǎng)站建設讓你可以放心的選擇與我們合作。

唯一的區(qū)別就是前者使用一個PHP變量綁定參數(shù),而后者使用一個值。

所以使用bindParam是第二個參數(shù)只能用變量名,而不能用變量值,而bindValue至可以使用具體值。

復制代碼 代碼如下:

$stm = $pdo-prepare("select * from users where user = :user");

$user = "jack";

//正確

$stm-bindParam(":user",$user);

//錯誤

//$stm-bindParam(":user","jack");

//正確

$stm-bindValue(":user",$user);

//正確

$stm-bindValue(":user","jack");

另外在存儲過程中,bindParam可以綁定為input/output變量,如下面:

復制代碼 代碼如下:

$stm = $pdo-prepare("call func(:param1)");

$param1 = "abcd";

$stm-bindParam(":param1",$param1); //正確

$stm-execute();

存儲過程執(zhí)行過后的結果可以直接反應到變量上。

對于那些內(nèi)存中的大數(shù)據(jù)塊參數(shù),處于性能的考慮,應優(yōu)先使用前者。

--------------------------------------------------

參數(shù)化查詢

參數(shù)化查詢(Parameterized Query 或 Parameterized Statement)是指在設計與數(shù)據(jù)庫連結并訪問數(shù)據(jù)時,在需要填入數(shù)值或數(shù)據(jù)的地方,使用參數(shù) (Parameter) 來給值,這個方法目前已被視為最有效可預防SQL注入攻擊 (SQL Injection) 的攻擊手法的防御方式。有部份的開發(fā)人員可能會認為使用參數(shù)化查詢,會讓程序更不好維護,或者在實現(xiàn)部份功能上會非常不便[來源請求],然而,使用參數(shù)化查詢造成的額外開發(fā)成本,通常都遠低于因為SQL注入攻擊漏洞被發(fā)現(xiàn)而遭受攻擊,所造成的重大損失。

除了安全因素,相比起拼接字符串的 SQL 語句,參數(shù)化的查詢往往有性能優(yōu)勢。因為參數(shù)化的查詢能讓不同的數(shù)據(jù)通過參數(shù)到達數(shù)據(jù)庫,從而公用同一條 SQL 語句。大多數(shù)數(shù)據(jù)庫會緩存解釋 SQL 語句產(chǎn)生的字節(jié)碼而省下重復解析的開銷。如果采取拼接字符串的 SQL 語句,則會由于操作數(shù)據(jù)是 SQL 語句的一部分而非參數(shù)的一部分,而反復大量解釋 SQL 語句產(chǎn)生不必要的開銷。

目錄

* 1 原理

* 2 SQL 指令撰寫方法

o 2.1 Microsoft SQL Server

o 2.2 Microsoft Access

o 2.3 MySQL

o 2.4 PostgreSQL/SQLite

* 3 客戶端程序撰寫方法

o 3.1 ADO.NET

o 3.2 PDO

o 3.3 JDBC

o 3.4 Cold Fusion

[編輯] 原理

在使用參數(shù)化查詢的情況下,數(shù)據(jù)庫服務器不會將參數(shù)的內(nèi)容視為SQL指令的一部份來處理,而是在數(shù)據(jù)庫完成 SQL 指令的編譯后,才套用參數(shù)運行,因此就算參數(shù)中含有具破壞性的指令,也不會被數(shù)據(jù)庫所運行。

[編輯] SQL 指令撰寫方法

在撰寫 SQL 指令時,利用參數(shù)來代表需要填入的數(shù)值,例如:

[編輯] Microsoft SQL Server

Microsoft SQL Server 的參數(shù)格式是以 "@" 字符加上參數(shù)名稱而成,SQL Server 亦支持匿名參數(shù) "?"。

SELECT * FROM myTable WHERE myID = @myID

INSERT INTO myTable (c1, c2, c3, c4) VALUES (@c1, @c2, @c3, @c4)

[編輯] Microsoft Access

Microsoft Access 不支持具名參數(shù),只支持匿名參數(shù) "?"。

UPDATE myTable SET c1 = ?, c2 = ?, c3 = ? WHERE c4 = ?

[編輯] MySQL

MySQL 的參數(shù)格式是以 "?" 字符加上參數(shù)名稱而成。

UPDATE myTable SET c1 = ?c1, c2 = ?c2, c3 = ?c3 WHERE c4 = ?c4

[編輯] PostgreSQL/SQLite

PostgreSQL 和 SQLite 的參數(shù)格式是以 “:” 加上參數(shù)名而成。當然,也支持類似 Access 的匿名參數(shù)。

UPDATE "myTable" SET "c1" = :c1, "c2" = :c2, "c3" = :c3 WHERE "c4" = :c4

[編輯] 客戶端程序撰寫方法

在客戶端代碼中撰寫使用參數(shù)的代碼,例如:

[編輯] ADO.NET

ADO.NET用于ASP.NET之內(nèi)。

SqlCommand sqlcmd = new SqlCommand("INSERT INTO myTable (c1, c2, c3, c4) VALUES (@c1, @c2, @c3, @c4)", sqlconn);

sqlcmd.Parameters.AddWithValue("@c1", 1); // 設定參數(shù) @c1 的值。

sqlcmd.Parameters.AddWithValue("@c2", 2); // 設定參數(shù) @c2 的值。

sqlcmd.Parameters.AddWithValue("@c3", 3); // 設定參數(shù) @c3 的值。

sqlcmd.Parameters.AddWithValue("@c4", 4); // 設定參數(shù) @c4 的值。

sqlconn.Open();

sqlcmd.ExecuteNonQuery();

sqlconn.Close();

[編輯] PDO

PDO用于PHP之內(nèi)。 在使用 PDO 驅(qū)動時,參數(shù)查詢的使用方法一般為:

復制代碼 代碼如下:

// 實例化數(shù)據(jù)抽象層對象

$db = new PDO('pgsql:host=127.0.0.1;port=5432;dbname=testdb');

// 對 SQL 語句執(zhí)行 prepare,得到 PDOStatement 對象

$stmt = $db-prepare('SELECT * FROM "myTable" WHERE "id" = :id AND "is_valid" = :is_valid');

// 綁定參數(shù)

$stmt-bindValue(':id', $id);

$stmt-bindValue(':is_valid', true);

// 查詢

$stmt-execute();

// 獲取數(shù)據(jù)

foreach($stmt as $row) {

var_dump($row);

}

[code]

對于 MySQL 的特定驅(qū)動,也可以這樣使用:

$db = new mysqli("localhost", "user", "pass", "database");

$stmt = $mysqli - prepare("SELECT priv FROM testUsers WHERE username=? AND password=?");

$stmt - bind_param("ss", $user, $pass);

$stmt - execute();

值得注意的是,以下方式雖然能有效防止 SQL注入 (歸功于 mysql_real_escape_string 函數(shù)的轉(zhuǎn)義),但并不是真正的參數(shù)化查詢。其本質(zhì)仍然是拼接字符串的 SQL 語句。

[code]

$query = sprintf("SELECT * FROM Users where UserName='%s' and Password='%s'",

mysql_real_escape_string($Username),

mysql_real_escape_string($Password));

mysql_query($query);

[編輯] JDBC

JDBC用于Java之內(nèi)。

java.sql.PreparedStatement prep = connection.prepareStatement(

"SELECT * FROM `users` WHERE USERNAME = ? AND PASSWORD = ?");

prep.setString(1, username);

prep.setString(2, password);

prep.executeQuery();

[編輯] Cold Fusion

cfquery name="Recordset1" datasource="cafetownsend"

SELECT *

FROM COMMENTS

WHERE COMMENT_ID =cfqueryparam value="#URL.COMMENT_ID#" cfsqltype="cf_sql_numeric"

/cfquery

PHP怎么用PDO同時插入多條數(shù)據(jù)?

數(shù)組表單后面不需要加數(shù)字標簽,會自動編碼。

見以下代碼:

!DOCTYPE?html

html?lang="zh-CN"

head

meta?charset="utf-8"

titleTest/title

/head

body

form?method="post"

input?type="text"?name="age[]"

textarea?name="name[]"/textarea

hr

input?type="text"?name="age[]"

textarea?name="name[]"/textarea

hr

input?type="text"?name="age[]"

textarea?name="name[]"/textarea

hr

input?type="text"?name="age[]"

textarea?name="name[]"/textarea

hr

input?type="text"?name="age[]"

textarea?name="name[]"/textarea

hr

button?type="submit"提交/button

/form

?php

if(!empty($_POST)){

$pdo???=?new?PDO("mysql:host=localhost;dbname=t1","root","");

$stmt??=?$pdo-prepare("insert?into?t2(age,name)values(:age,:name)");

$ages??=?$_POST['age'];

$names?=?$_POST['name'];

foreach($ages?as?$key?=?$age){

if(trim($age)?||?trim($names[$key])){

$stmt-execute(array(':age'=$age,':name'=$names[$key]));

}

}

}

?

/body

/html

php 怎么解決 大數(shù)據(jù)量 插入數(shù)據(jù)庫

ini_set('max_execution_time','0');

$pdo = new PDO("mysql:host=localhost;dbname=test","root","123456");

$sql = "insert into test(name,age,state,created_time) values";

for($i=0; $i100000; $i++){

$sql .="('zhangsan',21,1,'2015-09-17')";

}

$sql = substr($sql,0,strlen($sql)-1);

var_dump($sql);

if($pdo - exec($sql)){

echo "插入成功!";

echo $pdo - lastinsertid();

}

試試吧。10萬條1分鐘多,我覺得還行

PHP實現(xiàn)的pdo連接數(shù)據(jù)庫并插入數(shù)據(jù)功能簡單示例

本文實例講述了PHP實現(xiàn)的pdo連接數(shù)據(jù)庫并插入數(shù)據(jù)功能。分享給大家供大家參考,具體如下:

創(chuàng)建配置文件

pdo_config.php

?php

$db_Type

=

"mysql";//數(shù)據(jù)庫類型

$host

=

"localhost";//主機名

$dbName

=

"test";//數(shù)據(jù)庫名

$userName

=

"root";//用戶名

$password

=

"root";//密碼

$dsn

=

"{$db_Type}:host={$host};dbname={$dbName}";

?

pdo插入數(shù)據(jù)庫

pdo_insert.php

?php

header('Content-type:text/html;

charset=utf-8');

require

'pdo_config.php';

try{

$pdo

=

new

PDO

($dsn,$userName,$password);//創(chuàng)建一個連接對象

$pdo-exec('set

names

utf8');//設置編碼

$sql

=

"INSERT

student

(name,email)

VALUES

('李四','123@qq.com')";

$pdo-exec($sql);

}catch

(PDOException

$e){

die('操作失敗'.$e-getMessage());

}

//關閉連接

$pdo

=

null;

?

更多關于PHP相關內(nèi)容感興趣的讀者可查看本站專題:《PHP基于pdo操作數(shù)據(jù)庫技巧總結》、《php+mysqli數(shù)據(jù)庫程序設計技巧總結》、《php面向?qū)ο蟪绦蛟O計入門教程》、《php字符串(string)用法總結》、《php+mysql數(shù)據(jù)庫操作入門教程》及《php常見數(shù)據(jù)庫操作技巧匯總》

希望本文所述對大家PHP程序設計有所幫助。

您可能感興趣的文章:關于php連接mssql:pdo

odbc

sql

serverPHP5中使用PDO連接數(shù)據(jù)庫的方法PHP中PDO連接數(shù)據(jù)庫中各種DNS設置方法小結ThinkPHP框架基于PDO方式連接數(shù)據(jù)庫操作示例PHP使用ODBC連接數(shù)據(jù)庫的方法tp5(thinkPHP5)框架連接數(shù)據(jù)庫的方法示例PHP7使用ODBC連接SQL

Server2008

R2數(shù)據(jù)庫示例【基于thinkPHP5.1框架】tp5(thinkPHP5)操作mongoDB數(shù)據(jù)庫的方法thinkPHP5實現(xiàn)數(shù)據(jù)庫添加內(nèi)容的方法tp5(thinkPHP5)框架數(shù)據(jù)庫Db增刪改查常見操作總結PHP利用pdo_odbc實現(xiàn)連接數(shù)據(jù)庫示例【基于ThinkPHP5.1搭建的項目】

中軟卓越php大數(shù)據(jù)課程學哪些知識,誰說一下。

首先是向了解PHP呢還是大數(shù)據(jù)呢?不過想都拿下的話,不是一朝一夕的,步子邁得太大,不好,技在于精而后于多。

先說PHP:最基本其實就是web前端基礎;第二的話包括PHP語言基礎、Ajax、數(shù)據(jù)庫強化、運行環(huán)境及配置、面向?qū)ο驩OADUML等;第三就是主流框架的掌握了,Smarty、PDO等

再說大數(shù)據(jù):

基礎階段:Linux、Docker、KVM、MySQL基礎、Oracle基礎、MongoDB、redis。

hadoop mapreduce hdfs yarn:hadoop:Hadoop 概念、版本、歷史,HDFS工作原理,YARN介紹及組件介紹。

大數(shù)據(jù)存儲階段:hbase、hive、sqoop。

大數(shù)據(jù)架構設計階段:Flume分布式、Zookeeper、Kafka。

大數(shù)據(jù)實時計算階段:Mahout、Spark、storm。

大數(shù)據(jù)數(shù)據(jù)采集階段:Python、Scala。

大數(shù)據(jù)商業(yè)實戰(zhàn)階段:實操企業(yè)大數(shù)據(jù)處理業(yè)務場景,分析需求、解決方案實施,綜合技術實戰(zhàn)應用。

當前名稱:phppdo大數(shù)據(jù) php轉(zhuǎn)大數(shù)據(jù)
標題URL:http://muchs.cn/article46/docohhg.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供響應式網(wǎng)站、移動網(wǎng)站建設、關鍵詞優(yōu)化網(wǎng)站內(nèi)鏈、App開發(fā)、外貿(mào)網(wǎng)站建設

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化