ホームページ >バックエンド開発 >PHPチュートリアル >Pdo がすべての int 型を string 型に変換するのはなぜですか? 変換しないようにすることはできますか? ? ?
どのようなパラメータを設定する必要がありますか? ?
このデザインは何に基づいていますか? ? ?それはちょっとしたチートです
なぜ Pdo はすべての int 型を string 型に変換するのか
このコードは、bindParam を参照しているのでしょうか?
異なるアプリケーション間でデータを交換する場合、テキストのみ転送できます。
なぜ Pdo はすべての int 型を string 型に変換するのでしょうか
異なるアプリケーション間でデータを交換する場合、転送できるのはテキストのみです。
PHP はコンテキストに応じてデータ型を自動的に変換することしかできないということですか?ご心配なく
異なるアプリケーション間でデータをやり取りする場合、転送できるのはテキストのみです。
何を理解したいのかわかりません
自分で型を変換することしかできないということですか?
ライブラリから出てくるものはすべて文字列です
PHP はコンテキストに従ってデータ型を自動的に変換します。気にする必要はありません
そして、両方を計算する必要がある場合、それは機能しません!
コードを見ていないので、ここで推測するのは非常に困難です。
コードを投稿してください
public function setGBK() { $sql = sprintf( "set names 'gbk'" ); $this->conn->exec( $sql ); } public function setBinary() { $sql = sprintf( "set character_set_client=binary" ); $this->conn->exec( $sql ); } public function doExec($sql){ $sql = sprintf($sql); $this->conn->exec( $sql ); } public function query( $sql, $param ) { if( empty( $sql ) || empty( $this->conn ) ) { return array(); } $result = $this->conn->prepare( $sql ); if ( false == $result->execute($param) ) { return array(); } $result->setFetchMode( PDO::FETCH_ASSOC ); $row = $result->fetch(); if( $row ) { return $row; }else { return array(); } } public function querys( $sql, $param ) { if( empty( $sql ) || empty( $this->conn ) ) { return array(); } $result = $this->conn->prepare( $sql ); if ( false == $result->execute($param) ) { return array(); } $result->setFetchMode( PDO::FETCH_ASSOC ); $rows = $result->fetchAll(); return $rows; }
それに、 false == は false === として書く必要があります。本当に型に関連しているということ
false == を除いて、データ型に関連するものは何もありません
さらに、 false == は false === として書かれるべきであり、それは実際に型に関連しているということです
原理によれば、「1」== 1 しかし、ここで「1」==1 は false を意味します。false であるためには intval でなければなりません
これは問題ではありません
問題は、算術演算が「10」であることです- 5. 頭が痛いです、intval を強制するだけで大丈夫です
もしかしたら私のコードロジックに何か問題があるのでしょうか?
mysqli にはそのような問題はありません
mysql データベースから返されるクエリ結果 これらはすべてテキストであり、PHP はテーブル構造を認識しないため、文字列として扱われます。これは、mysqli と PDO の両方に当てはまります。
この質問はかなりひどいです。私も解決策を見つけていません。
array(PDO::ATTR_PERSISTENT => TRUE, PDO ::ATTR_STRINGIFY_FETCHES =>FALSE));
$db->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, FALSE);
$query = "SELECT `name`、`boss`、`rules`、` id` FROM `company`";
$r = $db->query($query);
$r->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, FALSE);
while ($row = $r- >fetch(PDO::FETCH_OBJ)) {
$row['id']; //type is string!!!! }
青いコードは自動的に文字列に変換しないように設定されていると言われています. しかし、うまくいきません。赤いコードを実行すると、サポートされていないことが直接表示されます。
PHP が自動的に型を変換してくれるなど、ナンセンスなことは言わないでください。 $row を JSON に変換し、それをすべて文字列型に変換したいのですが...
getColumnMeta(columnIndex) によって返される列のメタ情報は正しい型を持っていますが、2 つの問題があります:
1. 列インデックスを使用します。パラメータとしてカラム名を使用する代わりに、私の読みと常に矛盾します。 2. 公式ウェブサイトには、この機能を使用しないようにと記載されています。
この問題は正常に解決されました。報告してください。
まず、以前の MySQL では本当に解決できませんでした。文字列を外部システムに直接返します。少し新しい MySQL ドライバーとクライアント ドライバーは、文字列への内部変換を行わずに、ローカル型を直接変換できます。この基盤があれば、解決は可能です。
次に、PDO::ATTR_STRINGIFY_FETCHES は MySQL とは無関係です。PDO::ATTR_EMULATE_PREPARES (FALSE に設定) を使用して、MySQL 側に変換を実行しないように指示します。
最後に、もちろん PDO::ATTR_STRINGIFY_FETCHES を使用して、PHP に変換しないよう指示します。
この時点で、問題は解決されました。
JSON を変換するときにもこの問題に遭遇しましたが、後で json_encode() にパラメータ JSON_NUMERIC_CHECK があることがわかりました。