pdo绑定数据不对
<code>php</code><code>$sql = 'SELECT * FROM user WHERE id IN (:ids)'; $pdo = new PDO('mysql:host=localhost;dbname=test','root',''); $sth->prepare($sql); $sth->execute([':ids'=>'1,2,3,4,5']); $users = $sth->fetchAll(PDO::FETCH_ASSOC); //然后。。。就没有然后了。。。数据为空 </code>
经过我的一番测试,发现如果SQL是可以地:
<code>sql</code><code>SELECT * FROM user WHERE id IN (1,2,3,4,5) </code>
但是PDO
绑定数据的时候会把SQL变为酱紫(好吧,我猜的o(╯□╰)o):
<code>sql</code><code>SELECT * FROM user WHERE id IN ('1,2,3,4,5') </code>
这特么肯定就不行了啊。。。各位大大可有解决办法,既要能绑定数据,又要不出错?
注意,以上只是简单说明,我的实际情况还要复杂得多。。。但问题我确定过了,就是这个(只有在条件为
IN
时且IN
传入了2+
才会出错)。
@netingcn 我的这种绑定方式是可以的,只是被PDO
当成一个参数值了,而我其实是5个参数值。
回复内容:
<code>php</code><code>$sql = 'SELECT * FROM user WHERE id IN (:ids)'; $pdo = new PDO('mysql:host=localhost;dbname=test','root',''); $sth->prepare($sql); $sth->execute([':ids'=>'1,2,3,4,5']); $users = $sth->fetchAll(PDO::FETCH_ASSOC); //然后。。。就没有然后了。。。数据为空 </code>
经过我的一番测试,发现如果SQL是可以地:
<code>sql</code><code>SELECT * FROM user WHERE id IN (1,2,3,4,5) </code>
但是PDO
绑定数据的时候会把SQL变为酱紫(好吧,我猜的o(╯□╰)o):
<code>sql</code><code>SELECT * FROM user WHERE id IN ('1,2,3,4,5') </code>
这特么肯定就不行了啊。。。各位大大可有解决办法,既要能绑定数据,又要不出错?
注意,以上只是简单说明,我的实际情况还要复杂得多。。。但问题我确定过了,就是这个(只有在条件为
IN
时且IN
传入了2+
才会出错)。
@netingcn 我的这种绑定方式是可以的,只是被PDO
当成一个参数值了,而我其实是5个参数值。
pdo不支持这种数组绑定。很早就有人提过类似的问题,详情请戳这里:
http://segmentfault.com/q/1010000000119523
附上我临时解决方案,期待哪位大大给出更好的解决办法:
<code>$ids = [1,2,3,4,5];//外部传入的数组 $sql = 'SELECT * FROM user WHERE id IN ('; foreach($ids as $id){ $sql.=intval($id).','; } $sql = rtrim($sql ,',') . ')'; $pdo = new PDO('mysql:host=localhost;dbname=test','root',''); $sth->prepare($sql); $sth->execute(); $users = $sth->fetchAll(PDO::FETCH_ASSOC); </code>
要不别绑定,要不拆成字符串再绑定吧
http://php.net/manual/zh/pdostatement.execute.php
<code>$ids = array(1, 2, 3, 4, 5); $in = implode(',', array_fill(0, count($ids), '?')); // 生成问号占位符 $sth = $dbh->prepare("SELECT * FROM table WHERE id IN ($in)"); $sth->execute($ids); </code>
使用问号占位符时,execute绑定一个索引数组,所有的值作为 PDO::PARAM_STR 对待.
使用命名占位符时,execute绑定一个关联数组,所有的值作为 PDO::PARAM_STR 对待.

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

MySQL 8.4 (2024 年時点の最新の LTS リリース) で導入された主な変更の 1 つは、「MySQL Native Password」プラグインがデフォルトで有効ではなくなったことです。さらに、MySQL 9.0 ではこのプラグインが完全に削除されています。 この変更は PHP および他のアプリに影響します

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

CakePHP はオープンソースの MVC フレームワークです。これにより、アプリケーションの開発、展開、保守がはるかに簡単になります。 CakePHP には、最も一般的なタスクの過負荷を軽減するためのライブラリが多数あります。

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます
