こんにちは私はユーザーデータをデータベースに挿入する関数の使用に問題があります。クエリは2回実行されますが、なぜこれが発生しているのかわかりません。
私はこのコードを使用します:
if(empty($ _ POST ['submit'])=== false && empty($ errors)=== true){
$random = substr(str_shuffle('./0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'), 0, 22);;
$timezone = 'Europe/Berlin';
date_default_timezone_set($timezone);
$timestamp = time();
$time = date("d.m.Y - H:i:s", $timestamp);
$register_data = array(
'a' => $_POST['a'],
'b' => $_POST['b'],
'c' => $_POST['c'],
'd' => $_POST['d'],
'e' => $_POST['e'],
'f' => md5($_POST['password']),
'g' => md5($random),
'h' => $time,
);
register_user($register_data);
if (register_user($register_data) === true) {
echo "done";
}
exit();
}
関数は次のとおりです。
function array_sanitize(&$item){
global $db;
return mysqli_real_escape_string($db, $item);
}
function register_user($register_data){
global $db;
array_walk($register_data, 'array_sanitize');
$fields = '`' . implode('`, `', array_keys($register_data)) . '`';
$data = '\'' . implode('\', \'', $register_data) . '\'';
$insert = $db->query("INSERT INTO `table1` ($fields) VALUES ($data) ");
return (true);
}
ただし、この関数を置き換える場合:
function register_user($register_data){
global $db;
array_walk($register_data, 'array_sanitize');
$fields = '`' . implode('`, `', array_keys($register_data)) . '`';
$data = '\'' . implode('\', \'', $register_data) . '\'';
$sql = "INSERT INTO `table1` ($fields) VALUES(?,?,?,?,?,?,?,NOW())";
if($query = $db->prepare($sql)){
$query->bind_param('sssssss', $data);
$query->execute();
if ($query->affected_rows == 1) {
echo 'success';
} else {
echo 'nope';
}
}
return (true);
}
配列$register_dataから最後のキーを削除してもまったく機能しません。
誰かが私を助けてくれるといいですね。
どうもありがとう。