2

さて、これは少し複雑になるでしょう。

しかし今、私は自家製の関数を使用して、データベースにページを挿入するためのクエリを作成しています。

そして、柔軟な「挿入」方法を実行するためのよりスマートな方法があるかどうか疑問に思いました。

問題は、ページを作成するときに入力するオプションのフィールドがいくつかあることです。現在、これを使用して、すべてのフィールドを実行し、それらが設定されているかどうかを確認しています。:

//creates an Array which can be used to make a MySQL query
function createQueryArray($new) {
    if (isset($this->users_id))
        $this->query_array['users_id'] = mysql_real_escape_string($this->users_id);
    if (isset($this->pagename))
        $this->query_array['pagename'] = mysql_real_escape_string($this->pagename);
    if (isset($this->seo_pagetitle))
        $this->query_array['seo_pagetitle'] = mysql_real_escape_string($this->seo_pagetitle);
    if (isset($this->seo_description))
        $this->query_array['seo_description'] = mysql_real_escape_string($this->seo_description);
    if (isset($this->seo_keywords))
        $this->query_array['seo_keywords'] = mysql_real_escape_string($this->seo_keywords);
    if (isset($this->seo_robots))
        $this->query_array['seo_robots'] = mysql_real_escape_string($this->seo_robots);
    if (isset($this->seo_canonical))
        $this->query_array['seo_canonical'] = mysql_real_escape_string($this->seo_canonical);
    if (isset($this->type))
        $this->query_array['page_type'] = mysql_real_escape_string($this->type);
    //$this->query_array['last_edited'] = date("Y-m-d H:i:s");
}

その後、ページを挿入したい配列とテーブルを使用してこの関数を呼び出します。

function createInsertStm($arr, $table) {
    $mysqlQuery = ("INSERT INTO $table (");
    $insert = "";
    $values = "";
    if (is_array($arr))
        foreach ($arr as $key => $value) {
            if ($insert == "")
                $insert .= $key;
            else
                $insert .= ', ' . $key;
            if ($values == "")
                $values .= (preg_match('/(MAX\(id\))(.*?)/', $value)) ? $value : '"' . $value . '"';
            else
                $values .= (preg_match('/(MAX\(id\))(.*?)/', $value)) ? "," . $value : ',"' . $value . '"';
        }
    $mysqlQuery .= $insert;
    $mysqlQuery .= ') VALUES (';
    $mysqlQuery .= $values;
    $mysqlQuery .= ')';
    return $mysqlQuery;
}

$db->query($queryArray["pages"]);

プリペアドステートメントを使用してから、一部のフィールドなどをスキップすることは可能ですか?

4

1 に答える 1

1

テーブル定義でデフォルト値を設定すると、挿入時に値を省略できます。

デフォルト値の詳細については、次のページを確認してください。

http://dev.mysql.com/doc/refman/5.0/en/data-type-defaults.html

于 2012-11-20T21:20:57.213 に答える