Поиск хорошей эвристики для поиска A *

Несмотря на то, что старый вопрос мне очень помог, это мое решение, которое работает в моем классе DbContext. Параметр $rows представляет собой просто массив ассоциативных массивов, представляющих строки или модели: field name => insert value.

Если вы используете шаблон, который использует модели, это прекрасно вписывается при передаче данных модели в виде массива, скажем, из метод ToRowArray в классе модели.

Примечание. Это должно быть само собой разумеющимся, но никогда не позволять аргументам, переданным этому методу, подвергаться воздействию пользователя или полагаться на любой пользовательский ввод, другое чем значения вставки, которые были проверены и дезинфицированы. Аргумент $tableName и имена столбцов должны быть определены логикой вызова; например, модель User может быть сопоставлена ​​с таблицей пользователя, которая имеет список столбцов, сопоставленных с полями членов модели.

public function InsertRange($tableName, $rows)
{
    // Get column list
    $columnList = array_keys($rows[0]);
    $numColumns = count($columnList);
    $columnListString = implode(",", $columnList);

    // Generate pdo param placeholders
    $placeHolders = array();

    foreach($rows as $row)
    {
        $temp = array();

        for($i = 0; $i < count($row); $i++)
            $temp[] = "?";

        $placeHolders[] = "(" . implode(",", $temp) . ")";
    }

    $placeHolders = implode(",", $placeHolders);

    // Construct the query
    $sql = "insert into $tableName ($columnListString) values $placeHolders";
    $stmt = $this->pdo->prepare($sql);

    $j = 1;
    foreach($rows as $row)
    {
        for($i = 0; $i < $numColumns; $i++)
        {
            $stmt->bindParam($j, $row[$columnList[$i]]);
            $j++;
        }
    }

    $stmt->execute();
}
21
задан Bill the Lizard 15 September 2012 в 23:18
поделиться