3

WHEREキーの列の名前を必ずしも知らなくても、句の主キーを使用して行を選択する方法があるかどうか疑問に思っています。

私の提案するPHP関数は次のとおりです。

function getData($table,$key,$asarray=false) {
    $sql = mysql_query("select * from `".$table."` where primary='".$key."'");
    if( !$asarray) return mysql_fetch_assoc($sql);
    $ret = [];
    while($row = mysql_fetch_assoc($sql)) $ret[] = $row;
    return $ret;
}

いくつかのメモ:

  1. $tableコード内のリテラル文字列からのみ発生し、外部ソースから発生することはありません。
  2. この質問の目的のために、$keyすでに適切にエスケープされていると仮定します。
  3. 私はmysqlPHP 5.4を使用しているので、PHP 5.5で廃止されてもかまいません。
  4. 同じ理由$ret = []で、配列を定義する完全に有効な方法です。前回の質問で、この構文が原因でコードが機能しないと人々が言っ​​ていたので、これを言います。

現在、私の現在の実際の作業コードには、テーブル名を対応する主キー フィールド名にマッピングする連想配列があります。INFORMATION_SCHEMAこれを行う自動化された方法があるかどうか、できればクエリを伴わない方法があるSHOW CREATE TABLEかどうか疑問に思っていSHOW INDEXESます.

4

3 に答える 3

2

いいえ、主キー列を認識または照会せずに自動化する方法はありません。

主キーは複数の列である場合があることに注意してください!

Zend Framework 1.0 では、この種の一般的な主キーによる検索メソッドを実装しました。テーブルの主キーと他のすべての列を検出するには、テーブル ゲートウェイ クラスのコードを記述する必要がありました。

の代わりに、またはクエリを実行DESCするより高速な方法として使用します。コマンドはに対するクエリにマップされるだけであり、 InnoDB テーブルをトリガーしてテーブルの一部を再読み込みし、インメモリ統計を更新するため ( innodb_stats_on_metadata=0 を設定しない限り)、コストが高くなる可能性があります。SHOW CREATE TABLEINFORMATION_SCHEMASHOWINFORMATION_SCHEMA

于 2013-01-14T00:00:15.623 に答える
2

mysql サーバーへの別の呼び出しが必要になりますが、これにより、探しているものが得られるはずです。

SHOW KEYS FROM table WHERE Key_name = 'PRIMARY'
于 2013-01-14T00:02:04.327 に答える
1

私はこの種のものに Zend Framework 1 を使用します。

Zend_Db_Table オブジェクトから find() を実行し、必要なキーを次のように渡します。

$table = new Zend_Db_Table($table);
$rows = $table->find($key);
于 2013-01-14T00:20:56.007 に答える