pdo连接mysql数据库实现简单的增删该查和占位符操作

 PHP基础  2019-02-24  admin  1602  2162


       PHP支持的数据库类型较多,但在早期的PHP版本中,各种不同的数据库扩展互不兼容,每个扩展都有各自的操作函数,导致PHP的维护非常困难,可移植性也非常差。为了解决这一问题,PHP开发了PDO数据库抽象层,当选择不同数据库时,只需修改PDO中的DSN(数据源)即可。

$db_type = 'mysql';  //数据库服务器类型
$db_host = '127.0.0.1';
$db_port = '3306';
$db_name = 'news2018';
$db_user = 'root';
$db_pwd = 'root';
$db_charset = 'utf8';

//使用PDO扩展连接数据库,需要实例化PDO类,同时传递数据库连接参数,
//pdo连接数据库
$dsn = "{$db_type}:host={$db_host};port={$db_port};dbname={$db_name}";

//设置字符集
$db_options = [
    PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES ' . $db_charset
];

try {
    //连接数据库,选择数据库,设置字符集
    $pdo = new PDO($dsn, $db_user, $db_pwd, $db_options);
} catch (PDOException $e) {
    //输出异常信息
    echo $e->getMessage() . "<br>";
    exit;
}

//执行sql查询 SELECT
//query()
//query()方法主要用于有记录结果返回的操作,特别是SELECT操作。执行query()方法成功,则返回一个PDOStatement类的对象,失败则返回false。

$sql = 'select * from xuexi_news';
$res = $pdo->query($sql);
//处理结果集
//$row = $res->fetch();  //默认 FETCH_BOTH
//$row = $res->fetch(PDO::FETCH_ASSOC);
//$row = $res->fetch(PDO::FETCH_NUM);
//返回多行多列数据,二维数组
$result = [];
while ($row = $res->fetch(PDO::FETCH_ASSOC)) {
    $result[] = $row;
}

//返回一个数据
$res = $pdo->query($sql);
//$column = $res->fetchColumn();
$column = $res->fetchColumn(1);

//返回一列数据
$result2 = [];
while (($row = $res->fetchColumn(1)) !== false) {
    $result2[] = $row;
}

$res = $pdo->query($sql);
//$result = $res->fetchAll(); // PDO::FETCH_BOTH
//$result = $res->fetchAll(PDO::FETCH_ASSOC);
$result = $res->fetchAll(PDO::FETCH_NUM);

echo "<pre>";
print_r($result);

//执行sql INSERT、UPDATE、DELETE等操作
//exec()
//exec()则主要是针对没有结果集合返回的操作,比如INSERT、UPDATE、DELETE等操作,它用于执行一条SQL语句并返回执行后受影响的行数。
$sql = 'delete from xuexi_news where id=200';
$res = $pdo->exec($sql);
var_dump($res);




//预处理
//在SQL语句中可以添加占位符,PDO支持两种占位符,即问号占位符(?)和命名参数占位符(:参数名称)。

//问号占位符
//第一个参数是以1开始的索引
$sql = 'insert into xuexi_news (`title`,`content`,`author`) values (?,?,?)';
//执行预处理
$stmt = $pdo->prepare($sql);
$title = '新闻标题';
$content = '新闻内容';
$author = '新闻作者';
$stmt->bindParam(1, $title);
$stmt->bindParam(2, $content);
$stmt->bindParam(3, $author);

$res= $stmt->execute();
var_dump($res);


//命名参数占位符(:参数名称)
$sql = 'insert into xuexi_news (`title`,`content`,`author`) values (:title,:content,:author)';
//执行预处理
$stmt = $pdo->prepare($sql);
$title = '新闻标题2';
$content = '新闻内容2';
$author = '新闻作者2';
$stmt->bindParam(':title', $title);
$stmt->bindParam(':content', $content);
$stmt->bindParam(':author', $author);
$res= $stmt->execute();
var_dump($res);


$sql = 'insert into xuexi_news (`title`,`content`,`author`) values (?,?,?)';
//$stmt = $pdo->prepare($sql);
//$stmt->execute(['标题3','内容3','作者3']);

$sql = 'insert into xuexi_news (`title`,`content`,`author`) values (:title,:content,:author)';
//$stmt = $pdo->prepare($sql);
//$stmt->execute(['title'=>'标题4','content'=>'内容4','author'=>'作者4']);


$data = [
    ['标题1', '内容1', '作者1'],
    ['标题2', '内容2', '作者2'],
    ['标题3', '内容3', '作者3'],
    ['标题4', '内容4', '作者4'],
    ['标题5', '内容5', '作者5'],
];
$sql = 'insert into xuexi_news (`title`,`content`,`author`) values (?,?,?)';
//执行预处理
$stmt = $pdo->prepare($sql);
$title = '新闻标题';
$content = '新闻内容';
$author = '新闻作者';
$stmt->bindParam(1, $title);
$stmt->bindParam(2, $content);
$stmt->bindParam(3, $author);

foreach ($data as $val) {
    $title = $val[0];
    $content = $val[1];
    $author = $val[2];
    //执行预处理语句
    $stmt->execute();
}


如果文章对您有帮助,点击下方的广告,支持一下作者吧!

相关推荐


Systemd Web 管理系统:简化服务管理

# Systemd Web Systemd Web 是一个 Systemd 的 Web UI 管理系统,通过直观的界面和易用的操作,让用户能够轻松地管理 Linux 系统和服务。该项目旨在简化 Systemd 的使用,使得无论是专业的系统管理员还是普通的用户,都能够方便地对系统进行操作。 ## [github地址] (https://github.com/topascend/systemd

systemctl 使用

Systemd是Linux系统工具,用来启动守护进程,已成为大多数发行版的标准配置。而systemctl是Systemd的主命令,用于管理系统。其实我们大部分服务都有使用systemctl管理,比如MySQL、Nginx等等。常见配置如下:[Unit] #单元描述 Description=GFAPP #在什么服务启动之后再执行本程序 After=mysql.service [Serv

go 的 Pool池对象 sync.Pool 创建mysql连接池

//在这个例子中,我们创建了一个sync.Pool,其中包含一个New函数,该函数创建一个MySQL连接 //在someFunction中,我们使用dbPool.Get()从池中获取一个MySQL连接 //然后我们使用连接进行一些操作,最后使用dbPool.Put()将连接放回池中 //我们可以通过设置dbPool的大小来初始化连接池中的连接数量 //例如,如果我们想要初始化10个连接,我

php 保存远程图片到本地

/** *保存远程图片到本地 *@paramstring$avatar *@returnbool|string */ functionsaveRemoteImage($url,$filename=&#39;&#39;) { if($url==&#39;&#39;){ returnfalse; } try{ if($filename==&#39;&#39;){ $ex