Неперехваченное исключение: неверный номер параметра

Я запускаю запрос на обновление, который работает для одной страницы, но не для другой.

Вот результат:

Fatal error: Uncaught exception 'Doctrine_Connection_Mysql_Exception' with message 
    'SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens' in
    C:\xampp\htdocs\fanyer\doctrine\lib\Doctrine\Connection.php:1084
    Stack trace:
    #0 C:\xampp\htdocs\fanyer\doctrine\lib\Doctrine\Connection\Statement.php(253): 
       Doctrine_Connection->rethrowException(Object(PDOException),         
       Object(Doctrine_Connection_Statement))
    #1 C:\xampp\htdocs\fanyer\doctrine\lib\Doctrine\Connection.php(1049):      
       Doctrine_Connection_Statement->execute(Array)
    #2 C:\xampp\htdocs\fanyer\doctrine\lib\Doctrine\Query\Abstract.php(1091):    
       Doctrine_Connection->exec('UPDATE users SE...', Array)
    #3 C:\xampp\htdocs\fanyer\doctrine\lib\Doctrine\Query\Abstract.php(1142):   
       Doctrine_Query_Abstract->_execute(Array)
    #4 C:\xampp\htdocs\fanyer\doctrine\models\Users.php(122):
       Doctrine_Query_Abstract->execute()
    #5 C:\xampp\htdocs\fanyer\include\update_profile.inc.php(18):
       Users->update_coach_details('', '', NULL, 'Select', 'dav', 'coach', '3')
    #6 in C:\xampp\htdocs\fanyer\doctrine\lib\Doctrine\Connection.php on line 1084

Вот мой код:

public function update_coach_details($fname,$lname,$city,$state,$school,$rights,$user_id)
{
    return Doctrine_Query::create()
        ->update('Users')   
        ->set('f_name', '?', $fname)
        ->set('l_name', '?', $lname)
        ->set('city', '?', $city)
        ->set('state', '?', $state)
        ->set('school', '?', $school)
        ->set('rights', '?', $rights)
        ->where("id = '$user_id'")
        ->execute();
}

$account_type=$_SESSION['rights'];
$fname= $_POST['fname'];
$lname= $_POST['lname'];
$state= $_POST['state'];
$school= $_POST['school'];
$sports= $_POST['sports'];
$sports_array = explode(',',$sports);
$user_id=$_SESSION['user_id'];
$users= new Users();
$users->update_coach_details($fname,$lname,$city,$state,$school,$account_type,$user_id);

Проблема вызвана моими переданными параметрами?


person Mohit Jain    schedule 29.12.2009    source источник
comment
В моем случае просто использовался неправильный регистр в параметрах, из-за чего они не совпадали с параметрами, определенными в операторе sql.   -  person Kzqai    schedule 12.01.2012


Ответы (4)


Похоже, вы передаете неопределенную переменную $city в update_coach_details. Попробуйте добавить что-то вроде $city = '' перед вызовом функции.

person Ivan Nevostruev    schedule 29.12.2009

Токены — это часть SQL-запроса, которая заменяется значениями, переданными функции, выполняющей запрос (которые в данном случае передаются в виде массива); сообщение об ошибке говорит, что токенов больше, чем значений, которые должны их заменить.

person apaderno    schedule 29.12.2009

Суть в том, что у вас есть подготовленный оператор, который вы пытаетесь выполнить, но не указываете ни один из необходимых параметров.

Но это вся информация, которую я могу вам дать, не видя фактического запроса и кода вызова.

person Eric Petroelje    schedule 29.12.2009

На одной странице работает, на другой нет.

Что вы обнаружили, сравнив использование update_coach_details() на этих двух страницах? Могут ли они иметь разное количество параметров, как предполагает эта ошибка:

Invalid parameter number: number of bound variables does not  match number of tokens
person Alex Brasetvik    schedule 29.12.2009