我刚刚从mysql更改为mysqli,现在它不会插入任何数据(它会插入空字段)
在我改变与mysqli的连接之前,它工作正常。
知道为什么会这样做吗?
<?php
$mysqli = new mysqli("localhost", "root", "", "opdracht");
/* check connection */
if ($mysqli->connect_errno) {
printf("Connect failed: %s\n", $mysqli->connect_error);
exit();
}
if($_POST['action'] == 'button'){ // als de knop is ingedrukt insert dan
if(filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL) && preg_match('#\.[a-z]{2,6}$#i', $_POST['email'])){
$voornaam = mysqli_real_escape_string($_POST['voornaam']);
$achternaam = mysqli_real_escape_string($_POST['achternaam']);
$email = mysqli_real_escape_string($_POST['email']);
$telefoonnummer = mysqli_real_escape_string($_POST['telefoonnummer']);
$query = mysqli_query($mysqli,"insert into
`form` (`id`,`voornaam`, `achternaam`, `email`, `telefoonnummer`)
values ('','".$voornaam."', '".$achternaam."', '".$email."', '".$telefoonnummer."')")
or die(mysqli_error($mysqli));
$subject = 'Een email van '.$voornaam.'';
$headers = 'MIME-Version: 1.0' ."\r\n";
$headers .= "Content-type: text/html; charset=utf-8\r\n";
// opmaak mail
$content = '<html><header><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> </header><img src="http://www.tekstbureaudevulpen.nl/wp-content/uploads/2010/11/Webparking_logo.png"/><body>';
$content .= '<p>Je hebt een mail van:</p>';
$content .= $voornaam;
$content .= ' ';
$content .= $achternaam;
$content .= '<p>'.$telefoonnummer.'</p>';
$content .= '</body></html>';
mail($email, $subject, $content, $headers); // Verstuurd de mail
error_log(E_ALL);
}
}
?>
答案 0 :(得分:6)
因为现在字符串转义也需要连接句柄。以下所有内容都需要更新
$voornaam = mysqli_real_escape_string($_POST['voornaam']);
$achternaam = mysqli_real_escape_string($_POST['achternaam']);
$email = mysqli_real_escape_string($_POST['email']);
$telefoonnummer = mysqli_real_escape_string($_POST['telefoonnummer']);
这种格式
$voornaam = mysqli_real_escape_string($mysqli,$_POST['voornaam']);
^
但是,即使转移到新的API,您仍然不应该使用字符串转义查询,为什么不使用预准备语句?更安全,他们带来了更多的好处。
答案 1 :(得分:0)
您在变量设置中缺少mysql连接:
$voornaam = mysqli_real_escape_string($mysqli, $_POST['voornaam']);
$achternaam = mysqli_real_escape_string($mysqli, $_POST['achternaam']);
$email = mysqli_real_escape_string($mysqli,$_POST['email']);
$telefoonnummer = mysqli_real_escape_string($mysqli, $_POST['telefoonnummer']);
另外,我不会使用$ mysqli作为连接变量。 Con或Connection是首选。