try {
$db = new PDO("mysql:host=$host;dbname=$dbname",$user,$password) ;
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$formInfo = array('fname','lname','email','password','gender') ;
$entry = array() ;
foreach($formInfo as $data) {
$entry[$data] = $_POST[$data];
}
//print_r($entry);
$salt = Hash::gen_salt() ;
$sqlcollum = array(
'First_name'=> $entry['fname'] ,
'Last_name' => $entry['lname'] ,
'email' => $entry['email'] ,
'password' => Hash::gen_password($entry['password'],$salt) ,
'salt' => $salt,
'gender' => $entry['gender'] ,
'date' => date('Y-m-d H:i'),
'groups' => '1'
) ;
$sqlKeys = array_keys($sqlcollum) ;
$sqlValues = array_values($sqlcollum) ;
$keys = "'".implode("','", $sqlKeys)."'" ;
$value = "'".implode("','", $sqlValues)."'" ;
//echo $keys."<br/>" ;
//echo $value."<br/>" ;
$db->beginTransaction() ;
$insert = $db->query('INSERT INTO register ($keys) VALUES ($value)') ;
if($insert) {
echo "true" ;
} else {
$db->errorCode() ;
echo "false" ;
}
$db->commit() ;
} catch(PDOExpection $e) {
$db->rollback() ;
die($e->getMessage()) ;
}
为什么我会收到此错误?
错误::未捕获异常'PDOException',消息'SQLSTATE [42S22]:未找到列:1054未知列'$ value'在'field list''中register.php:46
答案 0 :(得分:4)
$insert = $db->query('INSERT INTO register ($keys) VALUES ($value)');
应该是
$insert = $db->query("INSERT INTO register ('$keys') VALUES ('$value')");
或
$insert = $db->query('INSERT INTO register ('.$keys.') VALUES ('.$value.')');
或
$insert = $db->query(sprintf('INSERT INTO register (%s) VALUES (%s)', $keys, $value));
您的代码无效的原因是,对于PHP $keys
和$value
插入到字符串中的操作,只是字符串本身的一部分,因此值不会被替换变量的。
答案 1 :(得分:0)
您的代码中有两个问题:
1)当您在查询中将这些引用用作字符串时,无需添加额外的引号。
替换:
$keys = "'".implode("','", $sqlKeys)."'" ;
$value = "'".implode("','", $sqlValues)."'" ;
使用:
$keys = implode("','", $sqlKeys);
$value = implode("','", $sqlValues);
2)将字符串变量用于引号:
$insert = $db->query("INSERT INTO register ('$keys') VALUES ('$value')") ;
答案 2 :(得分:-1)
你可以试试这个。
$keys = implode(",",$sqlKeys) ;
这工作。