连接
定义变量:
$servername = "xxx";
$username = "xxx";
$password = "xxx";
$dbname="xxx";
法一:面向对象
$conn = new mysqli($servername, $username, $password);
法二:面向过程
$conn = mysqli_connect($servername, $username, $password, $dbname);
mysql_connect已淘汰
法三:PDO
try {
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
// 设置 PDO 错误模式,用于抛出异常
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "INSERT INTO MyGuests (firstname, lastname, email)
VALUES ('John', 'Doe', 'john@example.com')";
// 使用 exec() ,没有结果返回
$conn->exec($sql);
echo "新记录插入成功";
}
catch(PDOException $e)
{
echo $sql . "<br>" . $e->getMessage();
}
预处理语句(用于插入语句的另一种方式
$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);
//参数绑定->给?号赋值 这里类型和顺序要一致,类型、赋值和??的顺序要一致
//后面有多少个参数,前面的sss就要写多少个,sss数值必须和后面的参数类型一致
// 插入多条数据
$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();
//输出插入语句的数量
printf("%d Row inserted.\n",$stmt->affected_rows);
每个参数必须指定类型,来保证数据的安全性。通过类型的判断可以减少SQL注入漏洞带来的风险
参数类型:
- i - integer(整型)
- d - double(双精度浮点型)
- s - string(字符串)
- b - BLOB(binary large object:二进制大对象)
在php mysql的操作中,prepare
、execute
与deallocate
都是mysql中的预处理语句,基础操作增删改查需用query
来实现
//删除数据
$sql='DELETE FROM archives WHERE title="diary1"';
$result=$conn->query($sql);
print_r($result);
//更新内容
$sql='UPDATE users SET password=991030 WHERE id=2';
$result=$conn->query($sql);
echo $result;
给字段添加唯一索引来处理重复数据
nickname
-需要添加索引的字段
index_nickname
-索引的名字,一般为index_xxx
$sql='ALTER TABLE users ADD UNIQUE index_nickname (nickname)';
$result=$conn->query($sql);
如果发现重复:
1.不能插入并报错:
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.更新(删掉原来的数据插入新数据):
INSERT REPLACE INTO person_tbl (last_name, first_name)
VALUES( 'Jay', 'Thomas');
返回最后一次查询的ID - mysqli_insert_id()
返回一个在最后一个查询中自动生成的带有 AUTO_INCREMENT
字段值的整数。如果数字 > 最大整数值,它将返回一个字符串。如果没有更新或没有 AUTO_INCREMENT
字段,将返回 0。
如在插入数据后获得返回值来判断是否插入成功。