Итак, я пытаюсь написать общую вставку sqlite, которую можно использовать независимо от количества элементов в строке. Это для одной строки, предполагается, что все столбцы, кроме ID, для которых задано автоинкрементное целое число, назначены, и необходимо использовать bindparam. Я пытался это так:
Table Quarterbacks
ID---firstName---lastName
public static function insert($table, $values)
{
$pdo = new PDO('sqlite:testTable.sqlite');
$inputString = implode(",", $values);
$statement = $pdo->prepare("insert into $table values (:value)");
$statement->bindParam(':value', $inputString);
$statement->execute();
}
$new = array("Steve", "Young");
Query::insert("Quarterbacks", $new);
Идея состоит в том, что теперь в таблицу добавится новая строка, увеличится идентификатор и добавится Стив Янг. Но я получаю общую ошибку, что оператором подготовки является ложным. Я знаю, что мой pdo подключается к базе данных, как и другие методы тестирования. Существует множество связанных с массивами потоков, но кажется, что они намного сложнее, чем то, что я пытаюсь сделать. Я почти уверен, что это связано с обработкой одной строки как недопустимой, но она также не будет принимать массив строк для значений.
Редактировать: я начинаю склоняться к компромиссу, подобному bash, т.е. предоставлять большое, но не бесконечное количество параметров функции. Также открыт для стиля ... $, но я чувствую, что это заканчивается той же проблемой, что и сейчас.
Я смог заставить это работать
$name = "('daunte' , 'culpepper')";
$cats = "('firstName', 'lastName')";
$statement = $pdo->prepare("insert into $table" .$cats ." values" .$name);
$statement->execute();
Но не это
$name = "('reggie' , 'wayne')";
$cats = "('firstName', 'lastName')";
$statement = $pdo->prepare("insert into $table:cats values:name");
$statement->bindParam(':cats', $cats);
$statement->bindParam(':name', $name);
$statement->execute();