【问题标题】:PHP MySQL Unknown column 'address' in 'field list''字段列表'中的PHP MySQL未知列'地址'
【发布时间】:2012-04-29 06:32:28
【问题描述】:

关于这个类似的问题有很多帖子,但我仍然无法为我的代码得到明确的答案,即 PHP 和 MySQL 组合。提交表格后,我总是收到错误消息。肯定和语法有关。有趣的是mysql没有抱怨,我的apache也没有,而是在我的浏览器(firefox)上。

$add_master_sql = "INSERT INTO master_name (date_added, date_modified, f_name, l_name)
VALUES (now(), now(), '".$_POST["f_name"]."', '".$_POST["l_name"]."')";
$add_master_res = mysqli_query($mysqli, $add_master_sql) or die(mysqli_error($mysqli));

而我的MYSQL代码是:

CREATE TABLE master_name (
  id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
  date_added DATETIME,
  date_modified DATETIME,
  f_name VARCHAR (75),
  l_name VARCHAR (75)
);

可能与报价有关,但我仔细检查了匹配项,这很好。有人可以帮我解决这个问题吗?

【问题讨论】:

  • Hello SQL 注入。
  • 您能发布您收到的错误消息吗?它肯定会有所帮助。
  • 你确定这是抛出错误的那一行吗?
  • 这条线不太可能导致错误Unknown column 'address',因为您没有引用任何此类列。一个好的技术是在你执行它之前echo $add_master_sql;,然后直接对你的数据库运行它,例如在 phpMyAdmin 中。
  • 正如@Karpie 所说,您的代码容易受到 SQL 注入的攻击。您真的应该使用准备好的语句,将变量作为参数传递到其中,这些参数不会针对 SQL 进行评估。如果你不知道我在说什么,或者如何解决它,请阅读Bobby Tables 的故事。

标签: php mysql list field


【解决方案1】:

更重要的是使用pdoprepared查询来避免可能的sql注入。

<?php
// configuration
$dbtype     = "sqlite";
$dbhost             = "localhost";
$dbname     = "test";
$dbuser     = "root";
$dbpass     = "admin";

// database connection
$conn = new PDO("mysql:host=$dbhost;dbname=$dbname",$dbuser,$dbpass);

// new data
$dateAdded = getdate();
$dateModified = getdate();
$f_name = $_POST["f_name"];
$l_name = $_POST["l_name"];

// query
$sql = "INSERT INTO master_name (date_added, date_modified, f_name, l_name) VALUES (:f_name, :l_name, :dateAdded, :dateModified)";
$q = $conn->prepare($sql);
$q->execute(array(':dateAdded'=>$dateAdded ,
                  ':dateModified'=>$dateModified,
                  ':f_name'=>$f_name,
                  ':l_name'=>$l_name));    

?>

【讨论】:

  • +1 建议使用 PDO。但是,您有 4 列,2 个值...此外,根据我的经验,PDO 不能在多个地方重用相同的绑定变量。
  • OMG,用于简单插入的全屏代码。您的 PDO 使代码臃肿。分配 $f_name 变量有什么意义?
  • 感谢 DCoder!不,有四列,其中列出了两列,另外两列将使用 DATETIME 自动创建。这是一个小例子,但对我来说涵盖了很多东西。示例中的五个部分用于练习从数据库中添加/删除/查看数据。 1)menu.html,2)include.php(用于连接mysql),3)add-entry.php,4)select-entry.php,5)delete-entry.php。刚开始PHP编程,需要一些时间来消化你的回复。非常感谢!如果可能的话,请贪心:我可以把所有的文件都发给你让你看吗?再次感谢?
【解决方案2】:

“字段列表”中的未知列“地址”

在“字段列表”中查找使用“地址”列的查询。
您在此处发布的显然不是发出此错误的那个。
将您的 die(mysqli_error($mysqli)); 更改为

trigger_error(mysqli_error($mysqli));

页面上的所有查询
并查看发生错误的特定位置。

还请注意,您应该使用mysqli_real_escape_string(并保护所有其他变量免受 SQL 注入)将您放入查询中的每个变量作为带引号的字符串转义,或者将它们作为准备好的语句插入。

如果你的书没有告诉你,那就烧掉吧!

【讨论】:

  • 谢谢你的努力,但在这样的网站上没有用。没有人对理智的答案感兴趣,尤其是开场海报,他认为自己是专家:)
  • $add_address_sql = "INSERT INTO address (master_id, date_added, date_modified, address, city, state, zipcode, type) VALUES ('".$master_id."', now(), now() , '".$_POST["address"]."', '".$_POST["city"]."', '".$_POST["state"]."', '".$_POST["邮政编码"]."', '".$_POST["add_type"]."')"; $add_address_res = mysqli_query($mysqli, $add_address_sql) 或 trigger_error(mysqli_error($mysqli)); [错误] PHP 注意:/var/www/addentry.php 第 73 行的 'field list' 中的未知列 'address',referer:localhost/addentry.php 我无法从图书馆烧书。只需启动 PHP。很多东西要学!
  • 谢谢!现在该示例正在运行,并输出我所期望的。一切似乎都很好,除了错误消息(仍然存在,但这次在 apache error.log 而不是我的浏览器中):第 73 行 /var/www/addentry.php 中的“字段列表”中的“字段列表”中的未知列“地址”,引用者:@ 987654322@。必须更多地工作。凌晨3:00,该睡觉了。谢谢大家!
  • @Ivan 为什么不直接将此字段添加到表格中?
  • @Ivan 没关系。随意添加
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多