ホームページ >バックエンド開発 >PHPチュートリアル >Pdo がすべての int 型を string 型に変換するのはなぜですか? 変換しないようにすることはできますか? ? ?

Pdo がすべての int 型を string 型に変換するのはなぜですか? 変換しないようにすることはできますか? ? ?

WBOY
WBOYオリジナル
2016-06-23 14:21:471054ブラウズ



どのようなパラメータを設定する必要がありますか? ?

このデザインは何に基づいていますか? ? ?それはちょっとしたチートです


ディスカッションへの返信 (解決策)

パラメータを渡すときに、その型を設定する必要があります。もちろん、-1 に設定することもできます。パラメータを渡すときにそれを設定するには、もちろん-1を設定できますか?サンプルコードを教えてください。あるいは、アドレスを説明できる場所

なぜ Pdo はすべての int 型を string 型に変換するのか

このコードは、bindParam を参照しているのでしょうか?


異なるアプリケーション間でデータを交換する場合、テキストのみ転送できます。

何を理解したいのかわかりません


なぜ Pdo はすべての int 型を string 型に変換するのでしょうか

このコードは、bindParam を参照しているのでしょうか? データベースから返される最終データ


異なるアプリケーション間でデータを交換する場合、転送できるのはテキストのみです。

何を理解したいのかわかりません。


PHP はコンテキストに応じてデータ型を自動的に変換することしかできないということですか?ご心配なく

4階さんの返信より引用:

異なるアプリケーション間でデータをやり取りする場合、転送できるのはテキストのみです。


何を理解したいのかわかりません
自分で型を変換することしかできないということですか?
ライブラリから出てくるものはすべて文字列です

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 == は false === として書かれるべきであり、それは実際に型に関連しているということです

原理によれば、「1」== 1 しかし、ここで「1」==1 は false を意味します。false であるためには intval でなければなりません

これは問題ではありません

問題は、算術演算が「10」であることです- 5. 頭が痛いです、intval を強制するだけで大​​丈夫です

もしかしたら私のコードロジックに何か問題があるのでしょうか?

しかし、pdo のようなデータベースの int によって返される文字列は、本当に多くの問題を引き起こします


mysqli にはそのような問題はありません


mysql データベースから返されるクエリ結果 これらはすべてテキストであり、PHP はテーブル構造を認識しないため、文字列として扱われます。これは、mysqli と PDO の両方に当てはまります。

この質問はかなりひどいです。私も解決策を見つけていません。

$db = 新しい PDO('mysql:host=' . $host . ';port=3306;dbname=' . $dbname, $username, $password,

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 があることがわかりました。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。