【问题标题】:Cannot Insert SQL Into One Specific Table无法将 SQL 插入到一个特定的表中
【发布时间】:2011-09-28 05:46:24
【问题描述】:

所以在过去的三个小时里,我一直在尝试将 sql 插入到这个特定的表中,我想我开始发疯了。 我已经孤立了一些我认为可能是问题的东西,但如果您想了解更多信息,请随时询问

基本上我目前有两个 sql 表:conceptsFUideas(我对此感到非常沮丧),它们存储在同一个数据库中。当我运行以下代码时:

$con = mysql_connect('localhost', 'username', 'password');
mysql_select_db("my_db", $con);
$sql = "INSERT INTO `concepts` (description) VALUES ('HAI THAR')";
mysql_query($sql,$con);

它在概念中插入一行,但是当我运行这段代码时:

$con = mysql_connect('localhost', 'username', 'password');
mysql_select_db("my_db", $con);
$sql = "INSERT INTO `FUideas` (description) VALUES ('HAI THAR')";
mysql_query($sql,$con);

它什么都不做。 如果你在 phpMyAdmin 选项卡中执行此操作,则进一步弄乱你的脑袋:

INSERT INTO `FUideas` (description) VALUES ('HAI THAR')

有效!?!?!

请提供任何想法、代码、技巧?我很绝望! 如果你有任何预感或线索告诉我,我会尝试并报告结果

编辑

如何创建表的 PHP Myadmin 转储:

-- phpMyAdmin SQL Dump
-- version 3.3.9
-- http://www.phpmyadmin.net
--
-- Host: localhost
-- Generation Time: Jul 04, 2011 at 11:21 AM
-- Server version: 5.0.91
-- PHP Version: 5.2.9

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;


CREATE TABLE concepts (
  id int(10) unsigned NOT NULL auto_increment,
  title tinytext NOT NULL,
  `user` tinytext NOT NULL,
  `date` int(10) unsigned NOT NULL default '0',
  summary tinytext NOT NULL,
  description text NOT NULL,
  tags tinytext NOT NULL,
  ip tinytext NOT NULL,
  appreciates tinyint(3) unsigned NOT NULL default '4',
  PRIMARY KEY  (id)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1;

-- phpMyAdmin SQL Dump
-- version 3.3.9
-- http://www.phpmyadmin.net
--
-- Host: localhost
-- Generation Time: Jul 04, 2011 at 11:23 AM
-- Server version: 5.0.91
-- PHP Version: 5.2.9

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;

--
-- Table structure for table 'FUideas'
--

CREATE TABLE FUideas (
  id int(10) unsigned NOT NULL auto_increment,
  `user` tinytext NOT NULL,
  `date` int(10) unsigned NOT NULL default '0',
  description text NOT NULL,
  upvotes text NOT NULL,
  downvotes text NOT NULL,
  appreciated tinyint(3) unsigned NOT NULL default '0',
  ip tinytext NOT NULL,
  PRIMARY KEY  (id)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1;

最终更新

对于其他关注此问题的人来说,事实证明我同时运行了旧代码,这导致了错误和不一致。

【问题讨论】:

  • 我也不明白你的第一个语句是如何工作的。您有多个 NOT NULL 列,但只插入 1。
  • 你可以使用 mysql_error([ resource $link_identifier ] ) 查看数据库中的最后一个错误。
  • 嗨@Ash,欢迎使用Mysql ...那个叫做数据库引擎的“东西”,总是插入默认值:“”代表varchar和文本,0000-00-00代表日期,0代表整数等等……
  • @dotore - 好吧,很公平,我只使用过 MSSQL。那你能告诉我指定NOT NULL的意义吗?
  • @Ash 这样如果它未定义,它将返回 0 或 "" 而不是 NULL

标签: php sql insert phpmyadmin


【解决方案1】:

试试

$sql = "INSERT INTO `FUideas` (`description`) VALUES ('HAI THAR')";

如果这不起作用,那么我问,在您创建表的 SQL 中,userdate 怎么会被引用,而其他字段却没有?

【讨论】:

  • description 不是mysql中的保留字,所以它周围的反引号是不必要的。
  • 是的,我想到了,但它并没有改变任何东西:(因为描述不是mysql中的保留字。谢谢你的猜测。
【解决方案2】:

由于它以管理员身份工作,我猜测您在连接中使用的用户名没有对 FUIdeas 表的插入权限。

【讨论】:

  • 这一定是一个特权问题。我只是从上面的SQL 创建了他的表,然后运行了查询,它没有问题。
【解决方案3】:

试试这个:

mysql_query($sql,$con) or die(mysql_error());

如果查询有问题(语法错误,或键违规等),那么 die() 调用将吐出描述问题的错误消息。

【讨论】:

  • 好的,我们刚刚输入了twilight zone。我这样做了,它告诉我我没有选择数据库....哎呀。所以我选择了正确的数据库并且它工作了......如果我选择了错误的数据库,为什么它仍然能够插入到concepts
  • 在 mysql_select_db() 调用之后也放置一个or die(...)。作为一般规则,检查数据库调用的返回值总是一个好主意——假设查询/调用成功是不好的做法。即使您的 sql 查询语法是完美的,也有太多其他方法无法让查询不检查返回值。
  • 等等,第一个也不行,好吧,我要疯了:)
【解决方案4】:

我不太确定,但描述可能会保留,试试..

$con = mysql_connect('localhost', 'username', 'password');
mysql_select_db("my_db", $con);
$sql = "INSERT INTO `FUideas` (`description`) VALUES ('HAI THAR')";
mysql_query($sql,$con) or die(mysql_error());

我想这对第一个工作没有意义......

两个实例的 my_db 是否相同?

【讨论】:

    【解决方案5】:

    您正在尝试插入单个值:

    $sql = "插入concepts (描述) VALUES ('HAI THAR')";

    虽然您的表格中有许多字段市场为NOT NULL。您必须使用一个插入语句至少填写 ALL 个必填字段。 顺便说一句,如果您传递的 DDL 是真实的,那么您的第一个“工作”表达式也无法工作。

    【讨论】:

      【解决方案6】:

      你能看到 SQL 错误吗?我看不到您的第一个查询是如何工作的,因为您有一堆没有默认值的非空列。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-01-18
        • 2015-02-26
        • 2022-01-24
        • 2010-10-09
        • 2018-12-04
        • 1970-01-01
        • 2012-02-10
        • 2013-01-11
        相关资源
        最近更新 更多