2015-02-16 5 views
-1

Наличие проблемы, когда PDO дает мне исключение, указав, что параметр не определен. Тем не менее, два массива, которые я предоставляю ему, имеют определенную длину и ключи, поэтому что не так?Ошибка SQLSTATE [HY093], но массивы имеют одинаковую длину

Ниже вы можете увидеть функцию, затем запрос на обновление, а затем массив, который отправляется. 52 - длина каждой части, а ниже - текст исключения.

public function query($sql,$data,$read) { 

    if (!($query = $this->connection->prepare($sql))) { exception(implode(' ',$query->errorInfo()),intval($query->errorCode())); } 
    if (!($query->execute($data))) { exception(implode(' ',$query->errorInfo()),intval($query->errorCode())); } 

    if ($read) { $result = $query->fetchAll(PDO::FETCH_ASSOC); $this->count_reads++; } else { $result = $query->rowCount(); $this->count_writes++; }  

    $query = null; return $result;  
}   

UPDATE objects_servers SET id = :id, info__enabled = :info__enabled, info__version = :info__version, info__title = :info__title, info__color = :info__color, info__contact = :info__contact, info__chunksize = :info__chunksize, info__downloadwait = :info__downloadwait, info__crypto__ciphers = :info__crypto__ciphers, info__crypto__salt-length = :info__crypto__salt-length, info__crypto__pbkdf2-algorithm = :info__crypto__pbkdf2-algorithm, info__crypto__pbkdf2-iterations = :info__crypto__pbkdf2-iterations, info__crypto__chunk-size = :info__crypto__chunk-size, info__email__hostname = :info__email__hostname, info__email__smtp-auth = :info__email__smtp-auth, info__email__auth-password = :info__email__auth-password, info__email__auth-username = :info__email__auth-username, info__email__from-address = :info__email__from-address, info__email__from-name = :info__email__from-name, info__email__port = :info__email__port, info__email__smtp-secure = :info__email__smtp-secure, info__email__bcc-address = :info__email__bcc-address, features__users__download-pages = :features__users__download-pages, features__users__file-encrypt = :features__users__file-encrypt, features__users__admin = :features__users__admin, features__server__email-validation = :features__server__email-validation, features__server__softlimit = :features__server__softlimit, features__server__publiclimit = :features__server__publiclimit , features__server__hourly-statistics = :features__server__hourly-statistics, features__server__actionlog = :features__server__actionlog, features__server__limit-alerts = :features__server__limit-alerts, features__server__sequential-contentfill = :features__server__sequential-contentfill, features__server__outgoing-email = :features__server__outgoing-email, features__server__multiple-accounts = :features__server__multiple-accounts, statistics__timed__#start = :statistics__timed__#start, statistics__timed__storage + = :statistics__timed__storage, statistics__timed__bandwidth + = :statistics__timed__bandwidth, statistics__timed__downloads + = :statistics__timed__downloads, statistics__forever__storage + = :statistics__forever__storage, statistics__forever__bandwidth + = :statistics__forever__bandwidth, statistics__forever__downloads + = :statistics__forever__downloads, limits__server__forever__storage = :limits__server__forever__storage, limits__server__timed__bandwidth = :limits__server__timed__bandwidth, limits__server__timed__downloads = :limits__server__timed__downloads, limits__server__timed-expire = :limits__server__timed-expire, limits__server__public-filecount = :limits__server__public-filecount, limits__server__public-filesize = :limits__server__public-filesize, limits__users__filesize = :limits__users__filesize, limits__users__filecount = :limits__users__filecount, limits__users__forever__storage = :limits__users__forever__storage, limits__users__timed__bandwidth = :limits__users__timed__bandwidth, limits__users__timed__downloads = :limits__users__timed__downloads ГДЕ id = 'DjvMb938gkH867d3';

{"id": "DjvMb938gkH867d3", "info__enabled": "1", "info__version": "0.0.1" , "info__title": "Развитие", "info__color": "# 007127", "info__contact": "yeeeup", "info__chunksize": "2097152", "info__downloadwait": "10", "info__crypto__ciphers": "змей : УТРА " "info__crypto__salt длина": "512", "info__crypto__pbkdf2-алгоритм": "sha512", "info__crypto__pbkdf2-Итерация": "5000", "info__crypto__chunk размер": "1048576", "info__email__hostname":" весело " "info__email__smtp-аутентификации": "1", "info__email__auth-пароль": "Нету", "info__email__auth-имя пользователя": "blah1", "info__email__from-адрес": "blah2", "info__email__from имя":" лицо, », "info__email__port": "587", "info__email__smtp-безопасный": "TLS", "info__email__bcc-адрес": "blah3", "features__users__download-страницы": "1", "features__users__file зашифровать": "1", "features__users__admin": "0", "features__server__email-проверки": "0", "features__server__softlimit": "1", "features__server__publiclimit": "0", "features__server__hourly-статистика": "1", "features__server__actionlog": "1 " "features__server__limit-оповещение": "1", "features__server__sequential-contentfill": "0"," FEA tures__server__outgoing-почту ":" 0" , "features__server__multiple-счета": "1", "statistics__timed __ # старт": нулевой, "statistics__timed__storage": "0", "statistics__timed__bandwidth": "0", "statistics__timed__downloads": "0" "statistics__forever__storage": "0", "statistics__forever__bandwidth": "0", "statistics__forever__downloads": "0", "limits__server__forever__storage": нулевой, "limits__server__timed__bandwidth": нулевой, "limits__server__timed__downloads": нулевой, "limits__server__timed устареть": нулевая "limits__server__public-FileCount": нулевой, "limits__server__public-Filesize": нулевой, "limits__users__filesize": нулевой, "limits__users__filecount": нулевой, "limits__users__forever__storage": нулевой, "limits__users__timed__bandwidth": нулевой, "limits__users__timed__downloads": нулевой}

Неустранимая ошибка: Uncaught exception «PDOException» с сообщением «SQLSTATE [HY093]: недопустимый номер параметра: параметр не определен» в C: \ Program Files \ Apache24 \ htdocs \ development \ Andromeda \ server \ classes \ database.class.inc.php: 28 Трассировка стека: # 0 C: \ Program Files \ Apache24 \ htdocs \ development \ Andromeda \ server \ classes \ database.class.inc.php (28): PDOStatement-> execute (Array) # 1 C: \ Program Files \ Apache24 \ htdocs \ development \ Andromeda \ server \ classes \ server.class.inc.php (117): Database-> query ('UPDATE objects _...', Array, false) # 2 C: \ Program Files \ Apache24 \ htdocs \ development \ Andromeda \ index.php (71): Server-> Сохранить() # 3 C: \ Program Files \ Apache24 \ htdocs \ development \ Andromeda \ index.php (32): Andromeda-> Run() # 4 { main} брошен в C: \ Program Files \ Apache24 \ htdocs \ development \ Andromeda \ server \ classes \ database.class.inc.php в строке 28

ответ

0

Многие специальные символы (такие как +, -, запятая, ...) не являются юридическими именами столбцов, если вы не укажете имя столбца в bactics: test__variable-hyphen.

В противном случае это слишком похоже на вычитание.

0

Я, кажется, сузил его - PDO возвращает ошибку, если на e ключей содержит дефис типа: test__variable-hyphen. Почему это не разрешено?

+0

Потому что это не отличает от оператора математическую операцию вычитания в этой точке ... – CBroe