我正在尝试使用PDO在MySQL数据库中插入一行,而我正在使用参数绑定,但是我遇到了一个奇怪的错误。重要的功能是:
private static function getConnection() : \Pdo
{
$con = new \PDO('mysql:host=localhost;dbname=mydatabase;charset=utf8', 'myuser', 'mypassword');
return $con;
}
public static function runBool(string $query, ?array $bind = []) : bool
{
return self::getConnection()
->prepare($query)
->execute($bind);
}
正如您所看到的,getConnection()
仅返回一个连接(并且它正常工作),问题在于runBool()
函数在->execute($bind);
行引发错误:
异常:参数'index'必须是int
例如,我的$query
是
INSERT INTO客户端(company_id,name,phone,cpf,rg,city_id,address,obs)VALUES(:company_id,:name,:phone,:cpf,:rg,:city_id,:address,:obs)< / p>
我的$bind
是
array(8) {
["company_id"]=> int(1)
["name"]=> string(3) "John Doe"
["phone"]=> string(11) "123456789"
["cpf"]=> string(0) ""
["rg"]=> string(0) ""
["city_id"]=> int(79)
["address"]=> string(0) ""
["obs"]=> string(0) ""
}
我已经尝试foreach
$bind
并单独使用bindParam()
或bindValue()
,然后运行execute
但我收到同样的错误execute()
。
我已经在数组的每个键之前包含:
并将其删除(在this comment之后),但没有任何变化。
我已经在Google上搜索了很多,但似乎没有人遇到同样的问题。
的信息:
感谢每一位帮助。
----------------编辑----------------
据我所知,我已经检查了我的命名空间,但是我正在使用\ Pdo,所以我认为它是原生的PHP PDO类。这是var_dump
的{{1}}:
object(PDOStatement)#90(1){[“queryString”] =&gt; string(149)“INSERT INTO client(company_id,name,phone,cpf,rg,city_id,address,obs)VALUES(:company_id,:name,:phone,:cpf,:rg,:city_id,:address,:obs )“}
这是我的桌子:
self::getConnection()->prepare($query)
答案 0 :(得分:1)
将$ bind变量更改为
array(8) {
[":company_id"]=> int(1)
[":name"]=> string(3) "John Doe"
[":phone"]=> string(11) "123456789"
[":cpf"]=> string(0) ""
[":rg"]=> string(0) ""
[":city_id"]=> int(79)
[":address"]=> string(0) ""
[":obs"]=> string(0) ""
}
答案 1 :(得分:1)
首先检查你使用的PDO,检查名称空间,因为你得到它的错误不是PDO错误,这是一个Phalcon结果集错误,这里是一个git:https://github.com/phalcon/cphalcon/blob/master/ext/phalcon/mvc/model/resultset.zep.c#L366
Phalcon尝试构建result_set
。
您可以在执行前提供var_dump
self::getConnection()->prepare($query);
。
并提供你桌子的DDL。