SQLSTATE[HY093] 错误,但数组的长度相同


SQLSTATE[HY093] error but arrays are the same length

有一个问题,PDO给我异常,说参数未定义。 但是,我提供给它的两个数组肯定具有相同的长度和键,那么有什么问题呢?

您可以在下面看到函数,然后是更新查询,然后是正在发送的数组。 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;    
}        

更新objects_servers集合 id = :idinfo__enabled = :info__enabledinfo__version = :info__versioninfo__title = :info__titleinfo__color = :info__colorinfo__contact = :info__contactinfo__chunksize = :info__chunksizeinfo__downloadwait = :info__downloadwaitinfo__crypto__ciphers = :info__crypto__ciphersinfo__crypto__salt-length = :info__crypto__salt-lengthinfo__crypto__pbkdf2-algorithm = :info__crypto__pbkdf2-algorithminfo__crypto__pbkdf2-iterations = :info__crypto__pbkdf2-iterationsinfo__crypto__chunk-size = :info__crypto__chunk-sizeinfo__email__hostname = :info__email__hostnameinfo__email__smtp-auth = :info__email__smtp-authinfo__email__auth-password = :info__email__auth-passwordinfo__email__auth-username = :info__email__auth-usernameinfo__email__from-address = :info__email__from-addressinfo__email__from-name = :info__email__from-nameinfo__email__port = :info__email__portinfo__email__smtp-secure = :info__email__smtp-secureinfo__email__bcc-address = :info__email__bcc-addressfeatures__users__download-pages = :features__users__download-pagesfeatures__users__file-encrypt = :features__users__file-encryptfeatures__users__admin = :features__users__adminfeatures__server__email-validation = :features__server__email-validationfeatures__server__softlimit = :features__server__softlimitfeatures__server__publiclimit = :features__server__publiclimitfeatures__server__hourly-statistics = :features__server__hourly-statisticsfeatures__server__actionlog = :features__server__actionlogfeatures__server__limit-alerts = :features__server__limit-alertsfeatures__server__sequential-contentfill = :features__server__sequential-contentfillfeatures__server__outgoing-email = :features__server__outgoing-emailfeatures__server__multiple-accounts = :features__server__multiple-accountsstatistics__timed__#start = :statistics__timed__#startstatistics__timed__storage += :statistics__timed__storagestatistics__timed__bandwidth += :statistics__timed__bandwidthstatistics__timed__downloads += :statistics__timed__downloadsstatistics__forever__storage += :statistics__forever__storagestatistics__forever__bandwidth += :statistics__forever__bandwidthstatistics__forever__downloads += :statistics__forever__downloadslimits__server__forever__storage = :limits__server__forever__storagelimits__server__timed__bandwidth = :limits__server__timed__bandwidthlimits__server__timed__downloads = :limits__server__timed__downloadslimits__server__timed-expire = :limits__server__timed-expirelimits__server__public-filecount = :limits__server__public-filecountlimits__server__public-filesize = :limits__server__public-filesizelimits__users__filesize = :limits__users__filesizelimits__users__filecount = :limits__users__filecountlimits__users__forever__storage = :limits__users__forever__storagelimits__users__timed__bandwidth = :limits__users__timed__bandwidthlimits__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":"Serpent:ctr","info__crypto__salt-length":"512","info__crypto__pbkdf2-algorithm":"sha512","info__crypto__pbkdf2-iterations":"5000","info__crypto__chunk-size":"1048576","info__email__hostname":"fun","info__email__smtp-auth":"1","info__email__auth-password":"nope","info__email__auth-username":"blah1","info__email__from-address":"blah2","info__email__from-name":"Person","info__email__port":"587","info__email__smtp-secure":"tls","info__email__bcc-address":"blah3","features__users__download-pages":"1","features__users__file-encrypt":"1","features__users__admin":"0","features__server__email-validation":"0","features__server__softlimit":"1","features__server__publiclimit":"0","features__server__hourly-statistics":"1","features__server__actionlog":"1","features__server__limit-alerts":"1","features__server__sequential-contentfill":"0","features__server__outgoing-email":"0","features__server__multiple-accounts":"1","statistics__timed__#start":null,"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-文件大小":空,"limits__users__filesize":空,"limits__users__filecount":空,"limits__users__forever__storage":空,"limits__users__timed__bandwidth":空,"limits__users__timed__downloads":空}

52

52

致命错误:未捕获的异常"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->Save(( #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 行

许多特殊字符(如 +、-、逗号等(不是合法的列名,除非您将列名括在 bactics 中:test__variable-hyphen .

否则,它看起来太像减法了。

我似乎已经缩小了范围 - PDO仅在其中一个键包含类似:test__variable-连字符的连字符时才返回错误。 为什么不允许这样做?