上一篇文章为您介绍了“PHP数据库如何使用PDO连接数据库?”在PHP中,为您详细地介绍了如何通过PDO连接数据库,这篇文章让您继续了解PHP中如何使用PDO执行SQL语句。但愿能帮到你!
前几篇文章中,我们了解了PHP如何通过PDO连接数据库,如何只需执行SQL语句才能连接数据库。对于PDO,有三种方法可以用来执行SQL语句:exec()方法,query()方法,以及prepare()和execute()方法。那么下面我们就一起去看看。
exec()方法。
当执行这些SQL语句,如INSERT、UPDATE和DELETE时,我们可以使用PDO对象中的exec()方法,使用PDO对象的exec(),使用该方法成功执行后,返回的结果是受影响的行数,
exec()方法的语法格式如下:
1
PDO::exec(字符串$sql)
特别说明:
$sql为SQL语句执行。
exec()方法并没有从SELECT查询语句获得对应的结果。
下面,我们尝试通过实例向数据库添加一条数据,比如下面:
$dsn='mysql:host=127.0.0.1;dbname=test';
$user='root';
$pwd='root';
try{
$pdo=newPDO($dsn,$user);
$sql="insertintouser(name,age,sex)values('values','21','男性')";
$res=$pdo->exec($sql);
if($res)echo'成功添加了'.$res.'条数据!';
}catch(PDOException$e){
echo'数据库连接失败:'.$e->getMessage();
}
?>
输出结果:
从上面的例子可以看到,我们已经通过exec()方法成功地将一条数据添加到数据库,而返回的结果是接收到影响的行的数量。如果要返回一个对象,可以使用query()方法,下面我们来看看另一种执行SQL语句的方法:query()方法。
query()方法。
通过exec()方法,在上面的案例中可以返回这些不需要返回结果集的语句信息,而在执行SELECT查询语句时,我们需要通过query()语句。如果这个方法成功地实施,反悔家国家就是PDOStatement对象。
如果使用query()方法,并且希望知道得到的总行数,你可以使用rowCount()方法来获得PDOStatement对象。
方法的语法格式如下(query):
PDO::查询(字符串$sql)
PDO::query(string$sql,int$PDO::FETCH_COLUMN)
字符串$sql、int$PDO::FETCH_CLASS、string$classname、array$ctorargs)
PDO::query(string$sql,int$PDO::FETCH_INTO)
这些注意事项包括:
$sql为要执行的SQL语句;其余的参数用于设置语句的默认获取模式,与调用结果对象PDOStatement::setFetchMode()相同。
然后,我们将使用query()方法来查询前面添加的数据,比如下面:
$dsn='mysql:host=127.0.0.1;dbname=test';
$user='root';
$pwd='root';
try{
$pdo=newPDO($dsn,$user);
$sql="SELECT*FROMuserWHEREname='壹壹';
$res=$pdo->query($sql,PDO::FETCH_ASSOC);
print_r($res);
}catch(PDOException$e){
echo'数据库连接失败:'.$e->getMessage();
}
?>
输出结果:
这些方法中,使用query()和exec()有一些需要注意的地方:
query()和exec()都能执行所有SQL语句,只返回不同的值;
query()能完成所有exec()的功能;
对exec()应用select语句时,始终返回0;
若要查看具体查询结果,可通过foreach语句进行循环输出。
prepare()和execute()方法。
使用预处理语句的方法可以使实现更加高效,当有必要对传入不同参数进行迭代时,这就是这一点。如果使用PDOStatement对象中的execute()方法,使用PDOStatement对象中的execute()方法,准备将要执行的查询。然后,我们将看到prepare()和execute()方法。
prepare()方法有以下语法格式:
1
prepare(string$statement[,array$driver_options=array)
这些注意事项包括:
$statement表示必须是一个对目标数据库有效的SQL语句模板;
$driver_options表示为可选参数,是一个包含一个或多个关键值对的数组类型,设置返回的PDOStatement对象的属性。
execute()方法有以下语法格式:
1
PDOStatement::执行(array$input_parameters]
这些注意事项包括:
$input_parameters在要执行的SQL语句中,只有一个元素的数目与绑定在SQL语句中的参数数量相同。
SQL语句模板中可包含零个或多个占位标记,可以采用命名(:name)或问号(?)格式在其执行时,将以实际数据代替形式。
相同的SQL语句中,不能同时使用命名和问号形式,只能选择其中一个参数形式。若以占位标签命名,则标记名称必须是唯一的。
下一步,我们来看看使用已命名的参数占位符,查询指定的SQL语句,比如下面:
1
$dsn='mysql:host=127.0.0.1;dbname=test';
$user='root';
$pwd='root';
try{
$pdo=newPDO($dsn,$user);
$sql="SELECTname,age,sexFROMuserWHEREage=:age";
$sth=$pdo>prepare($sql);
$sth->execute([':age'=>11]);
$res1=$sth->fetchAll();
$sth->execute(array(':age'=>14));
$res2=$sth->fetchAll();
echo'
';
print_r($res1);
print_r($res2);
}catch(PDOException$e){
echo'数据库连接失败:'.$e->getMessage();
}
?>
输出结果:
上面的例子使用了参数占位符的命名形式,查询指定的SQL语句,下一步我们来看看使用问号形式的参数占位符,查询指定的SQL语句。
示例如下:
$dsn='mysql:host=127.0.0.1;dbname=test';
$user='root';
$pwd='root';
try{
$pdo=newPDO($dsn,$user);
$sql="SELECTname,age,sexFROMuserWHEREage=?ANDsex=?";
$sth=