这应该是如此简单,但它让我发疯。我试图从某些表单字段向数据库中插入一些值,但只保存小数。我很困惑。
例如,这将从表单字段中回显出正确的值,因此我知道这些值正在传递...
echo "Trying to insert $posttime, $name, $agency, $message";
// The above correctly outputs this: Trying to insert 1344548784, Mike, Test, Test
但是下面的SQL查询只有在我在文本字段中使用数字时才有效,没有其他工作。 (我使用phpmyadmin确认)
mysql_query("INSERT INTO mytable (id, from_name, from_agency, message) VALUES ($posttime, $name, $agency, $message)");
作为测试,当我对值进行硬编码时,此查询会起作用。我很困惑......
mysql_query("INSERT INTO mytable (id, from_name, from_agency, message) VALUES (1344548784, 'Mike', 'Test', 'Test')");
答案 0 :(得分:1)
插入数据时,用引号封装文本字段。尽管它们是PHP中的变量,但您需要告诉数据库它们是字符串 - 这是用引号完成的。:
mysql_query("INSERT INTO mytable (id, from_name, from_agency, message) VALUES ($posttime, '$name', '$agency', '$message')");
此外,mysql_*
函数确实有点过时了,你应该真正考虑转向PDO或mysqli。
答案 1 :(得分:0)
首先:停止使用已弃用的mysql扩展!切换到PDO或mysqli。
使用这些技术之一,您可以使用预准备语句,并可以将值作为参数传递。它们还允许使用面向对象的编程风格。
示例:
// Assuming $link is a valid connection resource
// Prepare statement
$statement = mysqli_prepare($link, "INSERT INTO mytable (id, from_name, from_agency, message) VALUES (?, ?, ?, ?)");
// Bind parameters
mysqli_stmt_bind_param($statement, 'i', $posttime);
mysqli_stmt_bind_param($statement, 's', $name);
mysqli_stmt_bind_param($statement, 's', $agency);
mysqli_stmt_bind_param($statement, 's', $message);
// Execute
$result = mysqli_stmt_execute($statement);
这样您就不会受到SQL注入攻击。
答案 2 :(得分:0)
您缺少引号:
mysql_query("INSERT INTO mytable (id, from_name, from_agency, message) VALUES ('$posttime', '$name', '$agency', '$message')")