在mysql_real_escape_string中苦苦挣扎

时间:2013-03-27 15:37:31

标签: php

任何人都可以提供帮助。我正在尝试使用mysql_real_escape_string支持传递给PHP的内部消息传递服务的值,但我必须在某处获取语法错误,因为这些值没有插入到数据库中。我一直在寻找教程,帮助等,但努力做到正确。

我正在使用的代码如下。正确输入未转义的值($ email,$ from,$ time),但其他值只是输入为空白。

<?php
session_start();
$conn = mysqli_connect('localhost', 'username', 'password', 'dbname');

$email=$_SESSION['email'];
$to = $_POST ['touser'];
$toemail = $_POST['touseremail'];
$from = $_SESSION['name'];
$message = $_POST['message'];
$subject = $_POST['subject'];
$time = time();

$query ="INSERT INTO messages
(to_user, to_email, subject, message, from_user, from_email, daterecord)
VALUES (
'" . mysql_real_escape_string($conn, $to) . "', 
'" . mysql_real_escape_string($conn, $toemail) . "', 
'" . mysql_real_escape_string($conn, $subject) . "', 
'" . mysql_real_escape_string($conn, $message) . "', 
'$from', '$email', '$time')";
$send = $conn -> query($query);

echo "Message sent!";

?>

4 个答案:

答案 0 :(得分:5)

查看函数mysqli_real_escape_string()

我还应该注意,目前转义字符串的首选方法是parameter binding

答案 1 :(得分:1)

您使用mysql_real_escape_string代替mysqli_real_escape_string 修复它,它会更好用!

答案 2 :(得分:0)

使用函数 mysqli_real_escape_string()而不是

Doc:http://www.php.net/manual/en/mysqli.real-escape-string.php

答案 3 :(得分:0)

您遇到的实际问题是,您在mysql扩展程序和mysqli扩展程序之间混淆。

如果您使用的是mysqli_connect(),那么您使用的所有数据库函数都必须以mysqli_开头。

当你真正想要的功能是mysql_real_escape_string时,你正在使用mysqli_real_escape_string

i非常重要。

但是,如果您允许我超越所描述的实际问题,我建议您远离转义查询,而是使用参数化查询。

参数化查询是一种允许您指定如下查询的技术:

SELECT fieldname from talbe WHERE arg = ? AND arg2 = ?

然后使用mysqli_bind_param()将这些?替换为您的变量。

这种技术被认为是比使用转义字符串更好的技术。

希望有所帮助。