【发布时间】:2015-04-01 06:20:54
【问题描述】:
我正在为一个有很多 mysql 查询的站点开发一个类。类的想法是使它更容易和更统一。该类有效,但在插入查询中,它用数组的最后一个数据条目填充每一列。
这是我的功能:
public function insert($table, $values){
$sql = "INSERT INTO ".$table." (";
$x = 0;
$vals = "";
foreach($values as $col => $val){
$sql .= ($x < (count($values) - 1)) ? $col.", " : $col." ";
$vals .= ($x < (count($values) - 1)) ? "?, " : "? ";
//$vals .= ($x < (count($values) - 1)) ? $val.", " : $val." ";
$x++;
}
$sql .= ") VALUES (".$vals.")";
$stmt = $this->db_connection->prepare($sql);
$x = 0;
foreach($values as $col => $val){
//echo 'bindParam('.($x + 1).', '.$val.', PDO::PARAM_INT);';
$stmt->bindParam(($x + 1), $val, PDO::PARAM_INT);
$x++;
}
//print_r($stmt);
$stmt->execute();
print_r($stmt->errorInfo());
}
我已经回显了没有错误的sql:
INSERT INTO 帐户(名字、姓氏、电子邮件、地址、帖子、 国家,密码)值(?,?,?,?,?,?,?)
还有参数,同样没有错误:
bindParam(1, john, PDO::PARAM_INT);
bindParam(2, smith, PDO::PARAM_INT);
bindParam(3, john@test.com, PDO::PARAM_INT);
and so on...
这是数据库中的结果:
我似乎找不到哪里出了问题,但显然我在哪里。非常感谢帮助解决此问题。
这就是函数的调用方式:
$this->insert('accounts', array(
'first_name' => $f_name,
'last_name' => $l_name,
'email' => $email,
'address' => $address,
'post' => $zip,
'country' => $country,
'password' => $pass
));
调用不同的表:
$this->insert('newsletter', array( 'name' => $f_name.' '.$l_name, 'email' => $email )
但是这个有效!! //////// 编辑已解决 /////////////// 问题是 ->bindParam 循环,我把它切换到这个
public function insert($table, $values){
$sql = "INSERT INTO ".$table." (";
$x = 0;
$vals = "";
$querys = array();
foreach($values as $col => $val){
$sql .= ($x < (count($values) - 1)) ? $col.", " : $col." ";
$vals .= ($x < (count($values) - 1)) ? "?, " : "? ";
array_push($querys, $val);
$x++;
}
$sql .= ") VALUES (".$vals.")";
$stmt = $this->db_connection->prepare($sql);
for($x = 0; $x < count($querys); $x++){
$stmt->bindParam(($x + 1), $querys[$x], PDO::PARAM_INT);
}
//print_r($stmt);
$stmt->execute();
print_r($stmt->errorInfo());
}
它工作正常,不知道为什么但 foreach 循环导致错误
【问题讨论】:
-
当你在插入查询之前转储例如 $f_name 时,它是否也会给你正确的结果?
-
MySQL 的 utf8 使用 MySQL 的 utf8 字符集用于数据库、表和列,假设它映射到 UTF-8 编码。通过使用 utf8,您可以在数据库中存储您想要的任何符号
标签: php mysql class pdo foreach