連接
定義變量:
$servername = "xxx";
$username = "xxx";
$password = "xxx";
$dbname="xxx";
法一:面向?qū)ο?/strong>
$conn = new mysqli($servername, $username, $password);
法二:面向過(guò)程
$conn = mysqli_connect($servername, $username, $password, $dbname);
mysql_connect已淘汰
法三:PDO
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
// 設(shè)置 PDO 錯(cuò)誤模式,用于拋出異常
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('John', 'Doe', 'john@example.com')";
// 使用 exec() 叮雳,沒(méi)有結(jié)果返回
$conn->exec($sql);
echo "新記錄插入成功";
}
catch(PDOException $e)
{
echo $sql . "<br>" . $e->getMessage();
}
預(yù)處理語(yǔ)句(用于插入語(yǔ)句的另一種方式
$stmt=$conn->prepare("INSERT INTO archives(user_id, title, content, content_desc,push_time) VALUES(?,?,?,?,?)");
$stmt->bind_param('sssss',$user_id,$title,$content,$content_desc,$time);
//參數(shù)綁定->給?號(hào)賦值 這里類(lèi)型和順序要一致,類(lèi)型滨达、賦值和治泥?盾舌?的順序要一致
//后面有多少個(gè)參數(shù)遍愿,前面的sss就要寫(xiě)多少個(gè)奔滑,sss數(shù)值必須和后面的參數(shù)類(lèi)型一致
// 插入多條數(shù)據(jù)
$user_id='dian4';
$title='diary4';
$content='jiuzhe4';
$content_desc='xixi4';
$time=(string)date("Y/m/d");
$stmt->execute();
$user_id='dian5';
$title='diary5';
$content='jiuzhe5';
$content_desc='xixi5';
$time=(string)date("Y/m/d");
$stmt->execute();
//輸出插入語(yǔ)句的數(shù)量
printf("%d Row inserted.\n",$stmt->affected_rows);
每個(gè)參數(shù)必須指定類(lèi)型耙考,來(lái)保證數(shù)據(jù)的安全性谜喊。通過(guò)類(lèi)型的判斷可以減少SQL注入漏洞帶來(lái)的風(fēng)險(xiǎn)
參數(shù)類(lèi)型:
- i - integer(整型)
- d - double(雙精度浮點(diǎn)型)
- s - string(字符串)
- b - BLOB(binary large object:二進(jìn)制大對(duì)象)
在php mysql的操作中,prepare
倦始、execute
與deallocate
都是mysql中的預(yù)處理語(yǔ)句斗遏,基礎(chǔ)操作增刪改查需用query
來(lái)實(shí)現(xiàn)
//刪除數(shù)據(jù)
$sql='DELETE FROM archives WHERE title="diary1"';
$result=$conn->query($sql);
print_r($result);
//更新內(nèi)容
$sql='UPDATE users SET password=991030 WHERE id=2';
$result=$conn->query($sql);
echo $result;
給字段添加唯一索引來(lái)處理重復(fù)數(shù)據(jù)
nickname
-需要添加索引的字段
index_nickname
-索引的名字,一般為index_xxx
$sql='ALTER TABLE users ADD UNIQUE index_nickname (nickname)';
$result=$conn->query($sql);
如果發(fā)現(xiàn)重復(fù):
1.不能插入并報(bào)錯(cuò):
INSERT INTO person_tbl (last_name, first_name)
VALUES( 'Jay', 'Thomas');
2.不能插入并忽略:
INSERT IGNORE INTO person_tbl (last_name, first_name)
VALUES( 'Jay', 'Thomas');
3.更新(刪掉原來(lái)的數(shù)據(jù)插入新數(shù)據(jù)):
INSERT REPLACE INTO person_tbl (last_name, first_name)
VALUES( 'Jay', 'Thomas');
返回最后一次查詢(xún)的ID - mysqli_insert_id()
返回一個(gè)在最后一個(gè)查詢(xún)中自動(dòng)生成的帶有 AUTO_INCREMENT
字段值的整數(shù)鞋邑。如果數(shù)字 > 最大整數(shù)值诵次,它將返回一個(gè)字符串。如果沒(méi)有更新或沒(méi)有 AUTO_INCREMENT
字段枚碗,將返回 0逾一。
如在插入數(shù)據(jù)后獲得返回值來(lái)判斷是否插入成功。