Я пытаюсь создать собственный класс для управления операциями с базой данных. Я новичок в ООП, поэтому, если у вас есть предложения, скажите мне. Кстати, у меня есть метод обновления, который в качестве параметра указывал имя таблицы, поля для обновления, значения, с которыми я хочу обновить поля, а также поля и значения, чтобы помещать туда предложение. В это время у меня есть два разных массива: один для заданной части и один для части. Я строю строку запроса так PDOStatement Object ([queryString] => UPDATE Ordini SET Nome=':Nome', Cognome=': Cognome', Telefono=': Telefono' WHERE ID=':ID')
Обновление Php с использованием PDO
Теперь я хотел бы привязать params к переменным и выполнить запрос, и это проблема. Я стараюсь, но запрос не обновляет поля. - В значениях $ у меня есть значения, которые я хочу связать с переменными в части SET - В $ wv у меня есть значения, которые я хочу привязать к переменным в части WHERE - В $ fieldsQuery у меня есть заполнители для SET часть («: Nome», например) - В $ fieldsWhere у меня есть заполнители для части WHERE
Как я могу привязать в правильном порядке заполнители с переменными?
public function update($table=NULL, $fieldsQuery=NULL, $fieldsValues = NULL, $whereFields=NULL, $whereValues=NULL, $whereOperators = NULL)
{
if($fieldsQuery != NULL)
$fields = explode(",", $fieldsQuery);
if($fieldsValues != NULL)
$values = explode(",", $fieldsValues);
if($whereFields != NULL)
$wf = explode(",", $whereFields);
if($whereValues != NULL)
$wv = explode(",", $whereValues);
$fieldsQuery = array_map(function($field) { return ":$field";}, $fields);
$bindValuesSet = array_combine($fieldsQuery, $values);
//return an array in which every field is => Fieldname=':Fieldname'
$bindSetInitial = array_combine($fields, $fieldsQuery);
//transform every item in array from field to :field
$fieldsWhere = array_map(function($field) { return ":$field";}, $wf);
$bindValuesWhere = array_combine($fieldsWhere, $wv);
$bindWhereInitial = array_combine($wf, $fieldsWhere);
//implode an array mantaining both key and value
$fieldsValues = implode(', ', array_map(function ($v, $k) { return sprintf("%s='%s'", $k, $v); }, $bindSetInitial, array_keys($bindSetInitial)));
$fieldsWhere = implode(', ', array_map(function ($v, $k) { return sprintf("%s='%s'", $k, $v); }, $bindWhereInitial, array_keys($bindWhereInitial)));
$query = $this->db->prepare('UPDATE ' . $table . ' SET ' . $fieldsValues . ' WHERE ' . $fieldsWhere);
$query->bindParam(':Nome', $values[0]);
$query->bindParam(':Cognome', $values[1]);
$query->bindParam(':Telefono', $values[2]);
$query->bindParam(':ID', $wv[0], PDO::PARAM_INT);
$query->execute();
print_r($query->debugDumpParams());
}
там не должно быть никаких цитат в ' ': Cognome'' и т.д., и там это пространство там и т. д. .. проверить на наличие ошибок http://php.net/manual/en/pdo.error-handling.php –
Я подозреваю, что пространство в 'implode (',',' и кавычки в 'return sprintf ("% s = '% s'", '- вам нужно их удалить. –
Во-первых, спасибо за помощь! Я удалил кавычки. Теперь строка запроса выглядит так: UPDATE Ordini SET Nome =: Nome, Cognome =: Cognome, Telefono =: Telefono WHERE ID =: ID. Я ищу космическую проблему –