Я новичок в PHP и MySQL (и программировании в целом), и я пытаюсь создать общий класс обработчика базы данных с именем Database_Handler
, который поможет мне управлять основными вещами, такими как вставка, удаление, выбор, обновление и т. Д. .
В настоящее время я работаю над функцией-членом для обработки вставки. В моей функции вставки я хотел бы построить подготовленный оператор вставки PDO и выполнить его.
Предположим, что где-то в моем приложении я вызвал функцию вставки следующим образом:
$table = "books";
$cols = array('author', 'title', 'pubdate');
$values = array('Bob Smith', 'Surviving the Zombie Apocalypse', '2010');
$db_handler->insert($table, $cols, $values);
Как я могу использовать данные из $table
, $cols
и $values
для построения подготовленного оператора вставки PDO? Вот моя первая попытка, основанная на ответе "Как вставить массив в один оператор MySQL Prepared с PHP и PDO" .
public function insert($table, $cols, $values){
$numvalues = count($values);
$placeholder = array();
for($i=0; $i<$numvalues; $i++)
$placeholder[$i] = '?';
$sql = 'INSERT INTO '. $table . '(' . implode(",", $cols) . ') ';
$sql.= 'VALUES (' . implode("," $placeholder) . ')"';
$stmt = $this->dbh->prepare($sql);
$for($i=0; $i<$numvalues; $i++)
$stmt->bindParam($i+1, $values[$i])
$stmt->execute();
}
Не думаю, что это сработает, но, возможно, это даст вам представление о том, что я хочу сделать. Я немного сбит с толку, потому что пример , приведенный в руководстве по php.net :
$stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (?, ?)");
$stmt->bindParam(1, $name);
$stmt->bindParam(2, $value);
// insert one row
$name = 'one';
$value = 1;
$stmt->execute();
Похоже, что они отправляют $name
в качестве параметра функции bindParam()
, а затем присваивают значение $name
? Какое значение $name
при отправке на bindParam()
? Или bindParam()
просто связывает параметр с переменной, не беря данные этой переменной - позволяя execute()
обрабатывать эту часть?