1

一部のテーブルのフィールド変数を更新する ajax 関数を作成したいと思います。テーブル、フィールド、および行はすべて可変であり、ajax 関数を介して投稿された内容に基づいています。

これは私のquickedit.phpのコードです

define( "DB_DSN", "mysql:host=$host;dbname=$data" );
define( "DB_USERNAME", $user );
define( "DB_PASSWORD", $pass );

if(isset($_POST['table'])){ $table = $_POST['table'];}
if(isset($_POST['id'])){ $id = $_POST['id'];}
if(isset($_POST['field'])){ $field = $_POST['field'];}
if(isset($_POST['value'])){ $value = $_POST['value'];}

try {
    $con = new PDO( DB_DSN, DB_USERNAME, DB_PASSWORD );
} catch (Exception $e) {
    die("Connection Error");
}

try {
    $st = $con->prepare("UPDATE :table SET :field = :value WHERE id = :id");
    $st->execute(array(':table'=>$table, ':id'=>$id, ':field'=>$field, ':value'=>$value));
} catch (Exception $e) {
    die("Query Error");
}
echo "table: ".$table." id: ".$id." field: ".$field." value: ".$value;

ご覧のとおり、テーブル、列、および行を動的に選択したいと考えています。

例外についてはよくわかりませんが、どれもスローされておらず、一番下にあるものを正常にエコーしています。

4

2 に答える 2

0

ご覧のとおり、テーブル、列、および行を動的に選択したいと考えています。

はい、わかります。
そして、これはあなたの考えが間違っているところです。

これは、すべての優れたプログラマーが成長しなければならない、非常に伝染性の病気です。Universal Updater を作成しようとしています。残念ながら、自動化のアイデアは通常は問題ありませんが、自動化が多すぎると災害になる可能性があります。

アプリケーションは、何を更新するのか、またその理由を把握している必要があります。すべてのクエリは事前に作成する必要があり、データ部分のみが異なる場合があります。いくつかのフィールドから動的な更新を構築することは問題ありませんが、テーブル名でさえ動的にするのは多すぎます。

あなたの特定の問題に関して、ORMはあなたが本当に探しているものです。Yii Active recordでどのようにできるか見てみましょう:

$post=$table::model()->findByPk($id);
$post->$field=$value;
$post->save(); // save the change to database
于 2013-10-31T16:29:11.183 に答える