pdo中几种查询方式的区别

(1)exec

php手册中对其的描述是:执行一条 SQL 语句,并返回受影响的行数。

从中可以看出,execute可应用于“增删改查”中的增删改。因为查询操作会返回一个结果集,而exec函数只能返回受影响的函数。

(2)query

对应于“增删改查”中的“查”。用于执行一次的sql语句,返回一个PDOStatement结果集。此结果可认为是多维数组,可以直接使用。

(3)prepare

对于重复执行的语句,可以使用prepare作预处理(优化)。因为每次的查询语句执行之前都需要编译,通过prepare之后,可节省重复编译查询语句的开销。先prepare再execute。此时返回一个PDOStatement结果集,PDOStatement是一个对象,可以使用它的成员方法来处理结果集。视结果集类型的不同,也可直接将其作为多维数组使用。

如果prepare传入的sql语句是可变的话,可以通过bindParam来为其绑定参数,然后execute。

PS:prepare+execute的组合,可以适用于于“增删改查”所有的操作。


下面来看具体的使用例子:

<?php
$dsn      = "mysql:dbname=pdo;host=localhost";
$user     = "root";
$password = "root";
$dbh      = new PDO($dsn, $user, $password);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

//使用exec进行增删改
$sqlcmd = "insert into userinfo values (rand(),rand())";
$dbh->exec($sqlcmd);

//使用query进行查询操作
$sqlcmd = "select * from userinfo";
try {
    $data = $dbh->query($sqlcmd);
    foreach ($data as $row) {
        print_r($row);
        echo '<br>';
    }
}
catch (PDOException $e) {
    echo $e->getMessage();
}

//prepare先预处理,然后绑定参数,然后execute
$sqlcmd     = 'select  password from userinfo where username = :pname';
$res        = $dbh->prepare($sqlcmd);
$puser_name = "aaa";
$res->bindParam(':pname', $puser_name, PDO::PARAM_STR, 200);
$res->execute();
foreach ($res as $row) {
    print_r($row);
    echo "<br>";
}

?>

这只是最基本的使用例子。一般来说,在具体的项目中都会使用一个PDO封装类,有的框架如zendframework还自带了数据库处理类。

在SOEM(Simple Open EtherCAT Master),可以使用不同的方式发送PDO(Process Data Object)。以下是几种常见的发送PDO方式: 1. Synchronous PDO(同步PDO):在EtherCAT网络,主站周期性地发送同步信号,从站根据该信号来进行PDO的发送和接收。这种方式需要在主站和从站的配置进行相应的设置,并通过调用SOEM库的函数来触发PDO的发送。 2. Distributed Clocks(分布式时钟):分布式时钟是一种用于协调EtherCAT网络从站之间的同步的机制。在分布式时钟模式下,主站会通过EtherCAT网络广播时间信息,从站根据接收到的时间信息来同步其本地时钟,并相应地发送PDO。这种方式可以实现高精度的同步。 3. Mailbox PDO(邮箱PDO):Mailbox是一种通过发送和接收邮件来进行数据交换的机制。在Mailbox PDO模式下,主站通过发送包含数据的邮件来更新从站的PDO数据。从站接收到邮件后,将其的数据写入到PDO。这种方式可以实现较低的延迟和较高的带宽,适用于一些特定的应用场景。 需要根据具体的应用需求和EtherCAT设备的支持情况来选择合适的PDO发送方式。在SOEM,可以根据所选方式来配置主站和从站,并使用相应的函数来触发PDO的发送。具体的实现细节可以参考SOEM库的文档和示例代码。 希望以上信息对你有所帮助!如果你有更多的问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值