У меня возникла синтаксическая ошибка с оператором sql, который я выполняю, но для жизни я не могу найти никакой ошибки.Синтаксис MySQL ERROR, я просто не вижу, где
Я создал свой собственный класс базы данных с функциональностью, чтобы делать подготовленные операторы и выполнять их, я не думаю, что есть проблемы с моей реализацией, поскольку у меня никогда не было никаких проблем с ней до этого. Но, на всякий случай, есть проблема, и я покажу код для этого.
Приготовьте:
public function prepare($index, $sql) {
if(isset(self::$PS[$index])){
$ermsg = "Index [$index] is already in use.";
throw new Exception($ermsg, 1);
}
try{
self::$PS[$index] = $this->dbh->prepare($sql);
}
catch(PDOException $e){
return false;
}
return true;
}
и выполнить:
public function execute($index, Array $param = array()) {
if(!isset(self::$PS[$index])){
$ermsg = "Index [$index] is unavailable.";
throw new Exception($ermsg, 1);
}
foreach($param as $key => $val){
if(is_int($key)) ++$key;
$type = $this->getValueType($val);
$bnd = self::$PS[$index]->bindValue($key, $val, $type);
if(!$bnd){
$ermsg = "Paramater '$key' in [$index] failed to bind";
throw new Exception($ermsg, 2);
}
}
try{
$bnd = self::$PS[$index]->execute();
}
catch(PDOException $e){
$ermsg = "PDO-Error while executing prepared statement [$index] ".$e->getMessage();
throw new Exception($ermsg, 3);
}
if($bnd === false){
$ermsg = "Result error in prepared statement [$index]";
throw new Exception($ermsg, 3);
}
return self::$PS[$index];
}
Как я уже говорил, я никогда не испытывал проблем с помощью этого, так что я не думаю, что это проблема, но кто знает.
Теперь моя реализация:
$sql = "INSERT INTO ratings (course_id, overall, design, condition, service, value, rated_by, date_rated)
VALUES (:course_id, :overall, :design, :condition, :service, :value, :rated_by, now()))";
DBH::getInstance()->prepare('rateit', $sql);
$stmt = DBH::getInstance()->execute('rateit', array(
":course_id"=>$course_id,
":overall"=>$overall,
":design"=>$design,
":condition"=>$condition,
":service"=>$service,
":value"=>$value,
":rated_by"=>$log_user_id
));
}
if($stmt) {
echo 'suc, Thanks! Your ratings have been added to the course.';
exit();
}else{
echo 'err, There was an error rating the course. Please try again later';
exit();
}
Это точное сообщение об ошибке синтаксиса я получаю:
Синтаксическая ошибка или нарушение прав доступа: 1064 У вас есть ошибка в вашем SQL синтаксиса; проверьте руководство, соответствующее версии сервера MySQL, для правильного синтаксиса для использования рядом с «условием, сервисом, значением, рейтингу_by, date_rated». ВАЛЮТЫ (1, 5, 5, 5, 5, 3, '18', 'в строке 1 '
Если кто-то может обнаружить свою ошибку синтаксиса, или, возможно, найти что-то еще неправильно, что будет причиной этого, что было бы удивительным. Спасибо за любую помощь.
'condition' зарезервированное слово в MySQL. Вы можете либо изменить имя столбца, либо указать его с помощью обратных ссылок. – andrewsi
Также похоже, что у вас есть дополнительный ')' near' now() '. – Brian
Посмотрите на это: http://stackoverflow.com/q/1563146/1267304 – DontVoteMeDown