php 操作 mysql笔记

连接

定义变量:

$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的操作中,prepareexecutedeallocate都是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。
如在插入数据后获得返回值来判断是否插入成功。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。