博主辛苦了,我要打赏银两给博主,犒劳犒劳站长。
【摘要】介绍一下 php 的内置 mysqli 面向对象操作数据库的增删改完整示例,主要是方便自己今后的快速编程。
第一段完整示例代码是没有对 SQL 语句进行预处理,适合用于不需要接收数据来源于 get/post 参数的场景,避免会出现 SQL 注入,如下:
// 本页面方法没有对 SQL 语句进行预处理,适合用于不需要接收数据来源于 get/post 参数的场景
// 可能会出现 SQL 注入
// 页面基本信息
header("Content-type:text/html;charset=utf-8");
date_default_timezone_set("PRC");
error_reporting(0);
ini_set("max_execution_time", 3600);
// 数据库信息
$db = array(
'host' => '127.0.0.1',
'username' => 'root',
'password' => 'root',
'dbname' => 'test',
'port' => 3306,
'charset' => 'utf8',
);
// 创建数据库对象
$link = new mysqli($db['host'],$db['username'],$db['password'],$db['dbname'],$db['port']);
if($link->connect_errno)
{
die("MySQL CONNECT ERROR:" . $link->connect_error);
}
// 设置数据库连接字符集
$link->set_charset($db['charset']);
// 查询操作
$sql = "SELECT * FROM `article`";
$result = $link->query($sql) or die($link->errno . ':' .$link->error);
$num_rows = $result->num_rows; // 结果集的总行数
// 遍历结果集
if($num_rows > 0)
{
while($row = $result->fetch_assoc())
{
print_r($row);
}
}
// 插入操作
$insert_sql = sprintf("INSERT INTO `article`(title,uid) VALUES('%s',%d)","PHP mysqli",10);
$link->query($insert_sql) or die($link->errno . ':' .$link->error);
$insert_id = $link->insert_id; // 上一步插入操作产生的 ID
// 更新操作
$update_sql = sprintf("UPDATE `article` SET title = '%s' WHERE id = %d", 'PHP 入门', 1);
$link->query($update_sql) or die($link->errno . ':' .$link->error);
$affected_rows = $link->affected_rows; // 影响行数,0 则修改失败或修改的值未变化
// 删除操作
$delete_sql = sprintf("DELETE FROM `article` WHERE id = %d", 2);
$link->query($delete_sql) or die($link->errno . ':' .$link->error);
$affected_rows = $link->affected_rows;
$link->close(); // 关闭数据库
第二段完整示例是针对需要接收 get/post 数据的操作,对 SQL 语句进行预处理,可以有效的避免 SQL 注入。
// 页面基本信息
header("Content-type:text/html;charset=utf-8");
date_default_timezone_set("PRC");
// error_reporting(0);
ini_set("max_execution_time", 3600);
// 数据库信息
$db = array(
'host' => '127.0.0.1',
'username' => 'root',
'password' => 'root',
'dbname' => 'test',
'port' => 3306,
'charset' => 'utf8',
);
// 创建数据库对象
$link = new mysqli($db['host'],$db['username'],$db['password'],$db['dbname'],$db['port']);
if($link->connect_errno)
{
die("MySQL CONNECT ERROR:" . $link->connect_error);
}
// 设置数据库连接字符集
$link->set_charset($db['charset']);
// 查询操作
$select_sql = "SELECT * FROM `article` WHERE title LIKE ?"; // 占位符必须被用在整个值的位置
@$_GET['kw'] = "PHP";
$kw = "%".$_GET['kw']."%"; // % 放在这里生效
$stmt = $link->prepare($select_sql);
$stmt->bind_param("s",$kw);
$stmt->execute();
$result = $stmt->get_result();
$tot = $stmt->affected_rows; // 结果集的总行数
// $tot = $link->affected_rows; // 结果集的总行数
if($tot > 0)
{
while($row = $result->fetch_assoc())
{
var_dump($row);
}
}
// 插入操作
$title = "Python";
$uid = 200;
$insert_sql = "INSERT INTO `article`(title,uid) VALUES(?,?)";
$stmt = $link->prepare($insert_sql);
$stmt->bind_param("si",$title,$uid); // i:整数,d:浮点数,b:BLOB,s:字符串
$stmt->execute();
echo $stmt->insert_id; // 上一步插入操作产生的 ID
echo $stmt->affected_rows; // 影响行数
// 更新操作
$title = "Hello world";
$update_id = [1,2,3];
$update_ids = rtrim( str_pad('?', 2 * count($update_id), ',?') , ',');
$update_sql = "UPDATE `article` SET title = ? WHERE id in (?)";
$stmt = $link->prepare($update_sql);
$stmt->bind_param("ss",$title,$update_ids);
$stmt->execute();
echo $stmt->affected_rows; // 影响行数
// 删除操作
$delete_id = 10;
$delete_sql = "DELETE FROM `article` WHERE id = ?";
$stmt = $link->prepare($delete_sql);
$stmt->bind_param("i",$delete_id);
$stmt->execute();
echo $stmt->affected_rows; // 影响行数
$stmt->close(); // 释放结果集
$link->close(); // 关闭数据库
最后给出文中用到的表结构:
CREATE TABLE `article` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(255) DEFAULT NULL,
`uid` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
以上代码可以用于快速对数据库进行操作!用于方便自己、方便大家。
版权归 马富天PHP博客 所有
本文标题:《单个页面中 PHP 连接 MySQL 数据的基本操作【 mysqli 面向对象】》
本文链接地址:http://www.mafutian.net/413.html
转载请务必注明出处,小生将不胜感激,谢谢! 喜欢本文或觉得本文对您有帮助,请分享给您的朋友 ^_^
顶0
踩0
第 1 楼 文娱帝国 2019-03-29 16:02:53 暂无分享
评论审核未开启 |