我是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。
感谢任何帮助!
感谢。
答案 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)
你应该做的是:
启用正确的PHP错误处理。至少设置error_handling(E_ALL)并编写一个错误处理程序,它将错误详细地吐出到日志文件中并导致页面停止。目前,你完全无视错误的可能性,正在“为灾难充电”。我个人会使用PDO并将PDO :: ATTR_ERRMODE设置为PDO :: ERRMODE_EXCEPTION。
了解SQL注入以及您的页面如何易受其攻击(请参阅其他人的评论)。当你理解这一点时,你可能想要使用参数化查询(PDO可以这样做 - 请参阅我的第一点)。
尝试在脑海中决定你真正要做的事情。
我认为在页面中对变量进行字符串替换就足够了,然后将它们用作插入的参数。没有必要插入一行,然后更新它(或者实际上,正如你试图做的那样,更新表中的每一行!)