草庐IT

PHP PDO 事务自动回滚

我只是在我最近从使用PHPADODB库转换为PDO的一个应用程序上改进一些代码。在adodb中,一旦您启动事务,如果在开始和提交命令之间的查询出现任何异常,它会自动回滚。PDO是否也这样做。如果一个方法有一个查询,它在PDO中的开始和提交之间失败,trsaction会自动回滚还是需要隐式调用? 最佳答案 您必须自己调用回滚(并提交),PDO不会为您完成。像这样:$pdo=new\PDO(/*...*/);$pdo->beginTransaction();try{//dostuff..}catch(\Throwable$e){//us

php - 参数化 PDO 查询和 `LIMIT` 子句 - 不工作

这个问题在这里已经有了答案:HowtoapplybindValuemethodinLIMITclause?(11个答案)关闭7年前。我有这样的查询:SELECTimageurlFROMentriesWHEREthumbdlISNULLLIMIT10;它与PDO和MySQLWorkbench完美配合(它返回我想要的10个url)。但是我尝试用PDO参数化LIMIT:$cnt=10;$query=$this->link->prepare("SELECTimageurlFROMentriesWHEREimgdlisnullLIMIT?");$query->bindValue(1,$cnt);

php PDO fetchAll() - 虽然不工作,但 foreach 工作

我想知道我是否做得很好,或者fetchAll()不适用于WHILE。举个例子$db=newPDO("mysql:host=".$dbhost.";dbname=".$dbname,$dbuser,$dbpass);$page=$db->prepare("SELECT*FROMpage");$page->execute();foreach($page->fetchAll(PDO::FETCH_ASSOC)as$row){//echoarow//isworking}但是,如果尝试循环一段时间while($row=$page->fetchAll(PDO::FETCH_ASSOC)){//ec

php - PDO MySQL 连接关闭 - 未设置与空

我在PDO手册中读到要关闭连接,您应该使用以下命令:$connection=null;但是,有人建议,由于PHP5.3有一个新的GC,因此应该使用以下内容:unset($connection);我需要一劳永逸地知道哪个是首选,或者它们是否相同? 最佳答案 他们做同样的事情。取消设置$pdo句柄并将其设置为null都会关闭连接。您可以自己测试一下。在一个窗口中运行以下脚本,并在第二个窗口中打开MySQL客户端并每隔几秒运行一次SHOWPROCESSLIST以查看连接何时消失。然后将unset($pdo)更改为$pdo=null;并再次

PHP PDO 使用 SSL 连接到 MS SQLServer Express

我有一个设置为使用SSL的远程MS-SQLExpress2012服务器。我有我需要的所有证书。但是如何使用SSL创建到该服务器的PDO连接?我找到了很多关于使用SSL使用MySQL的PDO的文章,但没有找到关于使用PDO和SSL的MS-SQL的文章。 最佳答案 (仅限Microsoft操作系统)为了安全连接,请将“encrypt=true”附加到连接字符串。一个有值(value)的blogonthetopic.另请注意:确保您正在使用:MicrosoftDrivers确保您没有使用:OutdatedWrongDriver驱动程序位于

php - 在 SQL Server 上使用 PDO 时,为什么不能按列别名进行 ORDER BY?

注意:以下示例中的唯一区别是ORDERBY子句。好的代码:$sql='SELECT[date],?AS[name]FROM[transactions]WHERE[category_id]=10GROUPBY[date]ORDERBY[date]ASC';$stmt=$db->prepare($sql);$stmt->bindValue(1,'Test',PDO::PARAM_STR);$stmt->execute();$data=$stmt->fetchAll();//returnsrowsin$data错误代码:$sql='SELECT[date],?AS[name]FROM[tra

php - PDO rowCount 未返回正确的受影响行数

我遇到PDO准备语句和rowCount返回不正确的受影响行数的问题。我有一个简单的测试数据库:createtabletest(booleanvar1;);然后我有如下测试代码:$sth=$pdo->prepare("INSERTintotest(var1)VALUES(:val)");$sth->execute(array(':val'=>true));echo$sth->rowCount();按预期返回:1行受影响当我插入无效类型并且插入失败时:$sth=$pdo->prepare("INSERTintotest(var1)VALUES(:val)");$sth->execute(a

php - Laravel:PDO 异常,即使已安装和测试驱动程序也找不到驱动程序

这个问题在这里已经有了答案:HowtouseSQLServerconnectioninLaravel?(4个答案)关闭6年前。我正在处理一个必须连接到现有MSSQLServer数据库的Laravel5.1项目。我的项目目前在使用Apache2.4.18的Ubuntu16.04LTS服务器上。我已经在机器上安装了用于SQLServer的MicrosoftODBCLinux驱动程序(版本13.0.0.0),并使用sqlcmd命令对其进行了手动测试:sqlcmd-SDatabaseIPAddress-UDatabaseUsername一切正常。我可以登录到数据库没问题。但是,当我使用phpa

PHP PDO 准备语句查询不更新记录

我在使用PHP的PDO对象准备更新语句和更新记录时遇到问题。我采用原始SQL查询并在phpMyAdmin中运行它,其中的参数替换为传递给函数的值。按预期更新记录。但是,当从脚本运行时它不会更新。它抛出零错误并返回00000的errorInfo()回复,据我所知,这是PDO表示一切正常的方式。我知道PDO对象有效,因为它成功地从数据库中插入和选择记录,包括我试图更新的记录。我明白这个更新功能很难看,我只是在学习PDO。显然,这是使用PDO在PHP5中编码的。类函数:publicfunctionupdate($tbl_name,$where=null,$what=null){if(is_a

php - PDO 准备语句函数

我正在使用PDO准备语句,在处理我当前的项目时,我决定只为我需要的每个操作创建几个函数。下面是获取的例子functiondb_fetchAll($sql,$param){global$db;$stmt=$db->prepare($sql);if(empty($param)){$stmt->execute();}else{$stmt->execute($param);}$count=$stmt->rowCount();if($count==0){$result="";}elseif($count==1){$result[]=$stmt->fetch();}elseif($count>1)