我正在学习使用php mysqli预处理语句将数据放入我的数据库。我使用此代码将数据导入数据库。
$FirstName=ucwords($_POST['fname']);
$LastName=ucwords($_POST['lname'], "-'");
$Customer=$LastName." ".$FirstName;
$conn = new mysqli($host,$user,$password,$db);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$stmt = $conn->prepare("INSERT INTO customers (FirstName, LastName, Customer) VALUES (?, ?, ?)");
$stmt->bind_param("sss", $FirstName, $LastName, $Customer);
$stmt->execute();
$conn->close();
这非常有效。特别是带有带连字符的名字或带有撇号的名字,如Pete O&#Brian布莱恩。
现在,当我尝试将信息从数据库中恢复出来时,我正在使用以下代码。
$conn = new mysqli($host,$user,$password,$db);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$stmt = $conn -> prepare("SELECT Customer, Instrument1 FROM tblinvoice WHERE InvID = ?");
$stmt->bind_param("i", $tempid);
$stmt->execute();
$stmt -> bind_result($cust, $inst);
$stmt -> fetch();
$cust = mysqli_real_escape_string($conn, $cust);
$stmt -> close();
$conn -> close();
但上面的输出O \是O' Brian的姓氏。我删除了mysqli_real_escape_string($ conn,$ cust)并且只使用$ cust的绑定值我只是得到O而不是O' Brian。
任何人都可以告诉我我在做什么或者我在做错了什么?
答案 0 :(得分:1)
始终在db中将要显示在html中的内容中使用htmlspecialchars()
。
echo htmlspecialchars($yourresult['yourfield'], ENT_QUOTES);
填写HTML表单输入字段值时,我们应该始终使用htmlspecialchars。