Phalcon:异常:参数数量错误
Phalcon : Exception: Wrong number of parameters
我想执行准备好的插入:
<?php
function add_record($tab) {
$champs= "";
$value = "";
$separateur ="";
$ins = array();
foreach ($tab as $k => $v){
$champs .= $separateur . $k;
$value .= $separateur . "?" ;
$ins[] = $v;
$separateur = ",";
}
$champs = '('.$champs.')';
$value = '('.$value.')';
$sSQL = "INSERT INTO facture $champs VALUES $value";
executePreparedDML($sSQL, $ins);
}
function executePreparedDML($sSQL, $tab) {
$config = array(
"host" => SERVEUR,
"dbname" => BDD,
"port" => BDD_PORT,
"username" => LOGIN_DB,
"password" => PWS_DB);
$connection = new \Phalcon\Db\Adapter\Pdo\Mysql($config);
$statement = $connection->prepare($sSQL);
$pdoResult = $connection->executePrepared($statement, $tab);
}
?>
执行 add_record 函数时出现此错误:异常:参数数量错误!那怎么了?
它的做事方式有点迂回,但考虑到代码中的所有其他内容都很好,即 $tab
值等。看到的错误是...
$sSQL = "INSERT INTO facture $champs VALUES $value";
应该
$sSQL = "INSERT INTO facture " .$champs. " VALUES ". $value;
我手动写了 sql 但不是动态写的 :
$tab["fact_date"] = convertDateFormat5($tab["fact_date"]);
$config = array(
"host" => SERVEUR,
"dbname" => BDD,
"port" => BDD_PORT,
"username" => LOGIN_DB,
"password" => PWS_DB);
$connection = new \Phalcon\Db\Adapter\Pdo\Mysql($config);
$sSQL = "insert into facture(user_code,clt_id,fact_ref,fact_lib,fact_date,fact_comm) values(?,?,?,?,?,?)";
$statement = $connection->execute($sSQL, array($tab['user_code'], $tab['clt_id'], $tab['fact_ref'], $tab["fact_lib"], $tab['fact_date'], $tab["fact_comm"]));
$id = $connection->lastInsertId();
$connection->close();
return $id;
通过这种方法它有效,所以我不明白为什么它在动态编写时不起作用!
根据manual:
public PDOStatement executePrepared (PDOStatement $statement, array $placeholders, array $dataTypes)
Executes a prepared statement binding. This function uses integer indexes starting from zero
在手册的 other part 中我们可以看到 Phalcon 允许绑定名称,例如。 = :email
或索引为 ?0, ?1
.
的绑定
当您的函数正在为 [0 => 'first', 1 => 'second']
数组提供服务时,我会尝试创建类似 (?0, ?1, ?2, ?3, ?4)
的链,而不是 (?,?,?,?,?)
。
您也可以尝试不按照问题示例中的方式准备它,直接从您自己的答案中获取版本。
此外,在使用模型时,它非常简单:
$obj = new credentialModel();
$isOk = $obj->save(array(
'name' => 'John',
'surname' => 'Doe'
));
一旦您使用了 Phalcon,我建议您实际使用它。
我想执行准备好的插入:
<?php
function add_record($tab) {
$champs= "";
$value = "";
$separateur ="";
$ins = array();
foreach ($tab as $k => $v){
$champs .= $separateur . $k;
$value .= $separateur . "?" ;
$ins[] = $v;
$separateur = ",";
}
$champs = '('.$champs.')';
$value = '('.$value.')';
$sSQL = "INSERT INTO facture $champs VALUES $value";
executePreparedDML($sSQL, $ins);
}
function executePreparedDML($sSQL, $tab) {
$config = array(
"host" => SERVEUR,
"dbname" => BDD,
"port" => BDD_PORT,
"username" => LOGIN_DB,
"password" => PWS_DB);
$connection = new \Phalcon\Db\Adapter\Pdo\Mysql($config);
$statement = $connection->prepare($sSQL);
$pdoResult = $connection->executePrepared($statement, $tab);
}
?>
执行 add_record 函数时出现此错误:异常:参数数量错误!那怎么了?
它的做事方式有点迂回,但考虑到代码中的所有其他内容都很好,即 $tab
值等。看到的错误是...
$sSQL = "INSERT INTO facture $champs VALUES $value";
应该
$sSQL = "INSERT INTO facture " .$champs. " VALUES ". $value;
我手动写了 sql 但不是动态写的 :
$tab["fact_date"] = convertDateFormat5($tab["fact_date"]);
$config = array(
"host" => SERVEUR,
"dbname" => BDD,
"port" => BDD_PORT,
"username" => LOGIN_DB,
"password" => PWS_DB);
$connection = new \Phalcon\Db\Adapter\Pdo\Mysql($config);
$sSQL = "insert into facture(user_code,clt_id,fact_ref,fact_lib,fact_date,fact_comm) values(?,?,?,?,?,?)";
$statement = $connection->execute($sSQL, array($tab['user_code'], $tab['clt_id'], $tab['fact_ref'], $tab["fact_lib"], $tab['fact_date'], $tab["fact_comm"]));
$id = $connection->lastInsertId();
$connection->close();
return $id;
通过这种方法它有效,所以我不明白为什么它在动态编写时不起作用!
根据manual:
public PDOStatement executePrepared (PDOStatement $statement, array $placeholders, array $dataTypes)
Executes a prepared statement binding. This function uses integer indexes starting from zero
在手册的 other part 中我们可以看到 Phalcon 允许绑定名称,例如。 = :email
或索引为 ?0, ?1
.
当您的函数正在为 [0 => 'first', 1 => 'second']
数组提供服务时,我会尝试创建类似 (?0, ?1, ?2, ?3, ?4)
的链,而不是 (?,?,?,?,?)
。
您也可以尝试不按照问题示例中的方式准备它,直接从您自己的答案中获取版本。
此外,在使用模型时,它非常简单:
$obj = new credentialModel();
$isOk = $obj->save(array(
'name' => 'John',
'surname' => 'Doe'
));
一旦您使用了 Phalcon,我建议您实际使用它。