0

PHP用のmysqlクエリラッパー関数を作成しようとしています.SQLでMySQLクエリを実行するための最良の方法であるため、現在、準備済みステートメントを使用しようとしています.これまでのところ、これは私が持っているものです.

public function run_query($query)
{
    $arguments = $query['arguments'];
    $prep = $this->connection->prepare($query['query'])
    $dtString = '';

    foreach($arguments as $_field => $_argument)
    {
        $dtString .= array_keys($_argument);
    }
}

の構造$queryはこんな感じ

$query =    array( "query" => QUERY,
                  "arguments" => array(FIELD => array(DATATYPE => VALUE)))

そして何$queryができるかの例はこれです

$query =    array( "query" => "SELECT * FROM table_1 WHERE active = ? AND group = ?",
                  "arguments" => array("active" => array("i" => 1),
                                       "group" => array("i" => 17)))

ご覧のとおり、私がやろうとしているのは、クエリが何であるか、使用する引数の数に関係なく、関数で任意のクエリを許可することです。

今私の関数では、 for each の後の次のステップは使用すること$prep->bind_param($dtString, [VALUES]);ですが、各値は関数内の個別の引数であり、物事を台無しにすることを読みました

bind_param関数で可変数の引数を受け入れる方法があるかどうか疑問に思っています

私の現在の解決策は、別の関数を作成し、関数に引数として $arguments を渡し、my for each を新しい関数に移動し、サイズをカウントして作成した後、複数の異なる数の引数を$dtString持つスイッチ ケースを作成することです。bind_paramこれ

switch($count)
{
    case 1:
        $prep->bind_param($dtString, $array[0]);
        break;
    case 2:
        $prep->bind_param($dtString, $array[0], $array[1]);
        break;
    case 3:
        $prep->bind_param($dtString, $array[0], $array[1], $array[2]);
        break;
}

しかし、私はむしろこのようなコードを書く必要はありません

4

1 に答える 1