MySQL在插入之前删除空格

时间:2011-02-27 00:16:52

标签: php mysql insert replace

我是MySQL的新手。我想做的事情似乎并不太难,但我无法理解。

我想做两件事,目前只有一件是有效的。首先,我想将新条目的值复制到同一个表的另一列中。这有效。其次,我想查看这个新条目并从这个新的复制值中删除所有空格,并用_

替换它们

这就是我目前的情况:

<?php

$con = mysql_connect("localhost","username","password");
if (!$con)
{
    die('Could not connect: ' . mysql_error());
}
mysql_select_db("testdb", $con);

$sql="INSERT INTO testtable (name, type, rating, name_copy) 
VALUES ('$_POST[name]','$_POST[type]','$_POST[rating]','$_POST[name]')";
mysql_query("UPDATE 'testtable' SET 'name_copy' = REPLACE( 'name_copy', ' ', '_' )");
if (!mysql_query($sql,$con))
{
die('Error: ' . mysql_error());
}
header( 'Location: http://dev.test.com/records.php' ) ;
mysql_close($con)

?>

请注意,要复制名称值,我会将其发布两次。一次到name列,一次到name_copy列。不确定这是否是复制值的最佳方法。 基本上,我试图这样做的原因是我可以通过删除空格从这些值生成URL。

感谢任何帮助!

感谢。

3 个答案:

答案 0 :(得分:0)

mysql_query("UPDATE 'testtable' SET 'name_copy' = REPLACE( 'name_copy', ' ', '_' )");

从列名称周围删除单引号或将其更改为反引号:

mysql_query("UPDATE 'testtable' SET `name_copy` = REPLACE( 'name_copy', ' ', '_' )");

但是我建议在插入过程中或者至少限制UPDATE查询(在解决方案中它遍历每个插入的所有行)。

$sql = "INSERT INTO testtable (name, type, rating, name_copy) VALUES ".
       "('$name','$type','$rating','".str_replace(' ', '_', trim($name))."')";

顺便说一下,不要忘记在插入数据库之前转义变量!如果您不知道如何搜索它,这是一个经常被问到的问题。


修改

<?php

$con = mysql_connect("localhost","username","password");
if (!$con)
{
    die('Could not connect: ' . mysql_error());
}
mysql_select_db("testdb", $con);

$sql = "INSERT INTO testtable (name, type, rating, name_copy) VALUES ".
       "('$name','$type','$rating','".str_replace(' ', '_', trim($name))."')";
if (!mysql_query($sql,$con))
{
die('Error: ' . mysql_error());
}
header( 'Location: http://dev.test.com/records.php' ) ;
mysql_close($con);

?>

答案 1 :(得分:0)

您正在INSERT之前应用UPDATE。因此,新插入的行永远不会更新以去除空格。此外,您应该删除列名称周围的单引号。

答案 2 :(得分:0)

你应该做的是:

  1. 启用正确的PHP错误处理。至少设置error_handling(E_ALL)并编写一个错误处理程序,它将错误详细地吐出到日志文件中并导致页面停止。目前,你完全无视错误的可能性,正在“为灾难充电”。我个人会使用PDO并将PDO :: ATTR_ERRMODE设置为PDO :: ERRMODE_EXCEPTION。

  2. 了解SQL注入以及您的页面如何易受其攻击(请参阅其他人的评论)。当你理解这一点时,你可能想要使用参数化查询(PDO可以这样做 - 请参阅我的第一点)。

  3. 尝试在脑海中决定你真正要做的事情。

  4. 我认为在页面中对变量进行字符串替换就足够了,然后将它们用作插入的参数。没有必要插入一行,然后更新它(或者实际上,正如你试图做的那样,更新表中的每一行!)