18.6.4 执行准备好的查询
当准备好查询并绑定了相应的参数后,就可以通过调用PDOStatement类对象中的execute()方法,反复执行在数据库缓存区准备好的语句了。在下面的示例中,向前面提供的contactInfo表中使用预处理方式连续执行同一条INSERT语句,通过改变不同的参数添加两条记录,代码如下所示:
如果你只是要传递输入参数,并且有许多这样的参数要传递,那么,下面示例提供的快捷方式语法会非常有帮助。该示例通过在execute()方法中提供一个可选参数,该参数是由准备查询中的命名参数占位符组成的数组,这是第二种为预处理查询在执行中替换输入参数的方式。此语法能够省去对$stmt->bindParam()的调用。将上面的示例做如下修改:
上例使用命名参数去准备一条SQL语句,当调用execute()方法时就必须传递一个关联数组,并且这个关联数组的每个下标名称都要和命名参数名称一一对应(可以不用命名参数前缀“:”),数组中的值才能对应地替换SQL语句中的命名参数。如果使用的是问号(?)参数,则需要传递一个索引数组,数组中每个值的位置都要对应每个问号参数。将上面的示例片段做如下修改:
另外,如果执行的是INSERT语句,并且数据表有自动增长的ID字段,可以使用PDO对象中的lastInsertId()方法获取最后插入数据表中的记录ID。如果需要查看其他DML语句是否执行成功,可以通过PDOStatement类对象中的rowCount()方法获取影响记录的行数。