2010-08-30 142 views
0

我刚刚实现了mysql_real_escape_string(),现在我的脚本不会写入数据库。在添加mysql_real_escape_string()之前一切正常:PHP表单不会发布

任何想法??

$name = mysql_real_escape_string($_POST['name']); 
$description = mysql_real_escape_string($_POST['description']); 
$custid = mysql_real_escape_string($_SESSION['customerid']); 

mysql_send("INSERT INTO list 
       SET id = '', 
        name = '$name', 
        description = '$description', 
        custid = '$custid' "); 
+2

什么是mysql_send? 是否有任何错误报告?查询在发送到mysql之前是什么样的(尝试将它回显出来)? – blockhead 2010-08-30 16:25:40

+0

调试提示:将SQL语句放在一个变量中,即'$ sql =“INSERT INTO list SET id ='',name ='$ name'”'etc ... then'echo $ sql'(或'die ($ SQL)')。这可能会对导致问题的原因有所了解。另外,你怎么连接到数据库,你自己或通过某种第三方API?如果是后者,也许有api建议转义数据的方法。 – webbiedave 2010-08-30 16:26:57

回答

2

那是什么mysql_ 发送函数?
如果将其更改为mysql_query(),该怎么办?

+0

OP表示它一直在运行,直到他开始使用mysql_real_escape_string为止。他没有说他改变了这一行代码。 – blockhead 2010-08-30 16:47:33

0

mysql_real_escape_string应该作为第二个参数传递一个数据库连接,因为它要求的字符需要进行转义什么数据库。

$connection = mysql_connect(HOST, USERNAME, PASSWORD); 
$cleanstring = mysql_real_escape_string("my string", $connection); 
+0

不是如果你已经有一个连接打开 – blockhead 2010-08-30 16:24:47

+0

@blockhead,我正要说。您可能会与mysqli_real_escape_string混淆,它需要第一个参数作为数据库的链接。 – Lekensteyn 2010-08-30 16:26:00

+0

在某些情况下,它会感到困惑(就像如果您打开多个连接一样),我已经多次遇到此问题。我总是通过连接来确保字符串不被截断/擦除。 – KeatsKelleher 2010-08-30 16:26:57

0

上了解如何使用某些功能失败的典型...... 你仅仅使用于原始输入数据mysql_real_escape_string。你有没有听说过卫生/验证输入? mysql_real_escape_string对数字没有意义。如果你已经验证了一个变量是一个数字,你不需要逃避它。

mysql_send是mysql_query的别名吧? 使用调试代码,在mysql_send(...)之后加echo mysql_error();

1

应该很容易弄清楚发生了什么。第一步,不要将正在构建的查询发送到数据库,而是将它回显(或记录它),并查看实际发送到数据库的内容。

如果这并不明显,请参阅mysql_error()的说明。

0
 mysql_connect("localhost", "username", "password") or die(mysql_error()); 
     mysql_select_db("database") or die(mysql_error()); 
     $name = mysql_real_escape_string($_POST['name']); 
     $description = mysql_real_escape_string($_POST['description']); 
     $custid = mysql_real_escape_string($_SESSION['customerid']); 

     //If you doing Update use this code 
     mysql_query("UPDATE list SET id = '', name = '$name', description = '$description' WHERE custid = '$custid' ") or die(mysql_error()); 
     //OR if you doing Insert use this code. 
     mysql_query("INSERT INTO list(name, description, custid) VALUES('$name', '$description', '$custid')") or die(mysql_error()); 
     //If custid is Integer type user $custid instead of '$custid'.     

如果要更新的基础上,客户ID列表表中的记录使用UPDATE命令,或者如果你是insertinf记录成清单表使用INSERT命令。