0

独自の PDO ステートメント (ハードコード) で CodeIgniter を使用しています。別のテーブルへの外部キーである ID をクリックしようとすると、phpmyadmin でエラーが発生します。Phpmyadmin で外部キーを使用している場合、外部キーはそのテーブルへのハイパーリンクとして表示されます

これは例です:エラー

ただし、コマンドラインに移動すると、次のようになります。

mysql> select * from session WHERE anum = 'A00163047';
+------------+-----------+------+---------+---------------------+-----------------+--------+
| session_id | anum      | why  | aidyear | signintime          | studentcomments | status |
+------------+-----------+------+---------+---------------------+-----------------+--------+
|        184 | A00163047 |    4 | 14-15   | 2013-02-17 23:21:47 |                 |      0 |
+------------+-----------+------+---------+---------------------+-----------------+--------+
1 row in set (0.00 sec)

また、これらは異なる ID ですが、それでもエラーが持続することに注意してください。

anum = 'whatever id' を追加すると、クエリが返されるようです。データを取得してテーブルに入れるときに心配する必要がありますか?

XSS をオンとオフ (グローバル) の両方でこれを複製しようとしましたが、form_validation の実行可能なすべての組み合わせを試しましたが、それでも同じエラーが発生します。これはなぜですか?これにより、データがどこかで破損しているのではないかと心配しています。

編集1:

回答に基づいて、人々は実際の値が _27A0000000_27 であると考えています

これは当てはまりません。phpmyadmin ハイパーリンクをクリックすると、_27(whatever)_27 が追加され、エラーが発生します。選び方を知っている

例:select * from whatever WHERE anum = 'Whatever';

編集2:

テスト

phpmyadmin でハイパーリンクをクリックすると、次のような select ステートメントが自動的に生成されます。

テスト11

4

2 に答える 2

2

エンコードの問題に違いありません。0x27 は、単一引用符文字 ( ')の ASCII 16 進値です。

または、一重引用符を eacapes する方法で PDO がコーディングされていますか?

于 2013-02-18T06:48:06.380 に答える
0

varcharフィールドの値は常に引用符で囲む必要があるため、値を引用符で囲む必要があります。

したがって、クエリは次のようになります

SELECT * FROM `citest`.`student`

WHERE `anum` = '_27A00000000_27'

Limit 0,30

ありがとう。

于 2013-02-18T04:40:54.067 に答える