【问题标题】:MySQL remove spaces before insertMySQL在插入前删除空格
【发布时间】:2011-07-05 01:50:06
【问题描述】:

我是 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。

感谢任何帮助!

谢谢。

【问题讨论】:

  • 你还没有说你得到了什么错误。为什么你说它不起作用?
  • Little Bobby Tables 会喜欢您的网站。
  • 你只需要一个查询,为什么还要使用两个查询?
  • 老实说,我真的不知道自己在做什么。我是从网上其他来源拼凑出来的。你会怎么做呢?

标签: php mysql insert replace


【解决方案1】:
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);

?>

【讨论】:

  • 我不确定如何实现这一点,因为它删除了 $_POST 语句,并且在它们的位置有变量。这样做时,我收到错误,告诉我它们都是未定义的。我需要从中删除空格的唯一字段是 name_copy 字段。我需要存储它。
  • @Freddie,据我了解,您的 name_copy 字段包含与 name 相同的文本,只是被修剪并且空格转换为下划线。我已经替换了 $_POST 变量,因为出于安全原因,您不能简单地将 POST 变量放入查询中(搜索 sql injection)。您必须引用它们(我还建议在输入数据库之前检查输入的正确性)。例如,不要将$_POST['name'] 直接放入查询字符串,而是使用mysql_real_escape_string($_POST['name'])
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    你应该做的是:

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

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

    3. 试着在你的头脑中决定你真正想要做什么。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-30
      • 2018-06-07
      • 1970-01-01
      • 1970-01-01
      • 2016-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多