将表单字段保存到sql数据库 - 只保存数字?

时间:2012-08-09 22:18:51

标签: php sql

这应该是如此简单,但它让我发疯。我试图从某些表单字段向数据库中插入一些值,但只保存小数。我很困惑。

例如,这将从表单字段中回显出正确的值,因此我知道这些值正在传递...

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')");

3 个答案:

答案 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')")