Я написал функцию php, которая позволяет обновлять любую запись в любой таблице с любыми строковыми значениями (одним или несколькими). PDO не вызывает никаких ошибок, хотя скрипт не работает! Я несколько раз проверял имя базы данных, таблиц и полей. Все правильно. Это единственный запрос в моих функциях, который не работает. Я считаю, что это имеет какое-то отношение к массиву im, передаваемому в оператор SQL, и функции PDO-> bindParam().Сложный запрос PDO MYSQL не работает
Код:
public function updateTableDetail($table, $id, $params) {
include($this->doc_root . 'config/config.php');
if (is_array($params)) {
foreach ($params as $param) {
$param = Utilities::escapeString($param);
}
} else {
throw new InvalidInputException(InputErrors::NOTANARRAY);
}
if (is_nan($id)) throw new InvalidInputException(InputErrors::NOTANUMBER);
$table = Utilities::escapeString($table);
$sql = "UPDATE " . $table . "
SET " . $config['table_field_updated'] . " = :updated";
while (current($params)) {
$sql .= "," . key($params) . " = :" . key($params);
next($params);
}
reset($params);
$sql .= " WHERE id = :id
AND " . $config['userId'] . " = :userId";
if ($this->serverConnector == null) {
$this->serverConnector = new ServerConnector();
}
if ($this->db == null) {
$this->db = $this->serverConnector->openConnectionOnUserDb($this->dbname);
}
$stmt = $this->db->prepare($sql);
$updated = date("Y-m-d H:i:s");
$stmt->bindParam(':updated',$updated);
$stmt->bindParam(':id',$id);
$stmt->bindParam(':userId',$this->userId);
while ($param = current($params)) {
$stmt->bindParam(":".key($params),$param);
next($params);
}
reset($params);
$stmt->execute();
}
EDIT: Не беспокойтесь о включают заявление, в $ конфигурации [] - массив, а класс-переменные. Это все работает. Уже протестированы их значения.
Так что же не работает? – Halcyon
Вы ** УВЕРЕННО **, что ни один из этих динамических параметров не дублирует 'updated',' id' или 'userID'? имена параметров должны быть уникальными в запросе. Вы никогда не беспокоились о проверке возвращаемых значений вызовов привязки и просто предполагаете, что они преуспели. –
Проверка каждого звонка-перехвата является хорошей практикой? Спасибо за вашу помощь, хотя Akam уже решила проблему. – JustBasti