0

这应该很简单,但它让我发疯。我正在尝试从某些表单字段将一些值插入数据库,但只保存小数。我很困惑。

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

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

作为测试,当我对值进行硬编码时,此查询确实有效。我很困惑……</p>

mysql_query("INSERT INTO mytable (id, from_name, from_agency, message) VALUES (1344548784, 'Mike', 'Test', 'Test')");
4

3 回答 3

1

插入数据时用引号封装您的文本字段。即使它们是 PHP 中的变量,您也需要告诉数据库它们是字符串 - 这是用引号完成的。:

mysql_query("INSERT INTO mytable (id, from_name, from_agency, message) VALUES ($posttime, '$name', '$agency', '$message')");

此外,这些mysql_*功能确实有点过时,您应该真正考虑迁移到 PDO 或 mysqli。

于 2012-08-09T22:20:41.100 回答
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 注入的攻击。

于 2012-08-09T22:21:22.067 回答
0

您缺少的报价:

mysql_query("INSERT INTO mytable (id, from_name, from_agency, message) VALUES ('$posttime', '$name', '$agency', '$message')")
于 2012-08-09T22:22:47.747 回答