Mysql从php脚本插入空白字段,但不在phpmyadmin中?
Posted
技术标签:
【中文标题】Mysql从php脚本插入空白字段,但不在phpmyadmin中?【英文标题】:Mysql inserts blank field from php script, but not in phpmyadmin? 【发布时间】:2013-08-16 03:55:21 【问题描述】:我通过 phpmyadmin 将数据插入到我的表中。它向我展示了它使用的查询,因此我将其复制并粘贴到我的 php 代码中。
我的 PHP 代码假设要提交一个表单,我正试图将 $_POST('name') 放入查询中。当我运行代码时,它会填写所有内容,但 version_name em> 名称所在的字段。
有趣的是我使用了相同的 mysql 查询,它在 phpmyadmin 上正确插入。
我已经开始尝试随机名称而不是 POST 以查看它是否提交,但我一直得到一个空白...有什么建议吗?
$sql = "INSERT INTO `Prototype`.`Version` ('version_id', `version_name`, `version_status`, `created_date`, `created_by`) VALUES ('','A', 'A', CURRENT_TIMESTAMP, NULL);";
这是插入部分,我也尝试删除 version_id,因为它是自动增加的,但没有帮助。
第一行是从我的 php.ini 提交时的结果。第二行是我直接从 phpmyadmin 插入时。
任何帮助从我的 php 提交 version_name 都会很棒!
编辑----
这是我的 php 代码
<?php
// Retrieve form data
$name = $_POST['name'];
if (!$name)
echo "save_failed";
return;
$db = array(
'host' => 'localhost',
'login' => 'root',
'password' => '',
'database' => 'Prototype',
);
$link = @mysql_connect($db['host'], $db['login'], $db['password']);
if (!$link)
echo "save_failed";
return;
mysql_select_db($db['database']);
// Clean variables before performing insert
$clean_name = mysql_real_escape_string($name);
// Perform insert
$sql = "INSERT INTO `Prototype`.`Version` (`version_name`, `version_status`, `created_date`, `created_by`) VALUES ( 'A', 'A', CURRENT_TIMESTAMP, NULL);";
if (@mysql_query($sql, $link))
echo "success";
@mysql_close($link);
return;
else
echo "save_failed";
@mysql_close($link);
return;
?>
【问题讨论】:
【参考方案1】:服务器出错。我删除了数据库并从头开始,它解决了这个问题。几乎可以卸载并重新安装 xampp。
【讨论】:
【参考方案2】:这很多只是顺便说一句,而不是你问题的答案,但在 Mysql 4 中这会起作用:
自动递增值可以是
完全省略,如果您声明命名字段 空 0 ''(空字符串)从 Mysql 5 开始,最后一个将不起作用。
这是 Mysql 4 中未记录的功能,已在 Mysql 5 中删除。
【讨论】:
谢谢!我不完全确定哪种方法是更正确的方法来完成整个自动增量的事情。我玩过它,但在空白字段上仍然没有太大变化。【参考方案3】:首先$_POST('name');
什么都不是$_POST['name'];
是对的。现在使用以下查询回答您的问题。
$sql = "INSERT INTO `Prototype`.`Version` (`version_name`, `version_status`, `created_date`, `created_by`) VALUES ('A', 'A', CURRENT_TIMESTAMP, NULL)";
我还在我自己的桌子上检查过它,桌子是由你提供的结构制成的。 它的查询如下。
CREATE TABLE `proto` ( `version_id` int(3) NOT NULL AUTO_INCREMENT, `version_name` varchar(45) NOT NULL, `version_status` varchar(45) NOT NULL, `created_date` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `created_by` varchar(45) DEFAULT NULL, PRIMARY KEY (`version_id`)) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1
下面的代码是供你通过php提交的。
$options = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8');
$db = new PDO("mysql:host=".HOST.";dbname=".DBNAME.";charset=utf8", USERNAME, PASSWORD, $options);
$query = $db->prepare("INSERT INTO `Prototype`.`Version`
(`version_name`,
`version_status`,
`created_date`,
`created_by`)
VALUES
('A',
'A',
CURRENT_TIMESTAMP,
NULL)");
$result = $query->execute();
return $result ? true : false;
【讨论】:
我花了一段时间才弄清楚 PDO,但是一旦我尝试了你的代码,我仍然得到 version_name 的空白字段 如果您可以查看我上面的 php 代码,看看是否适合您!?这真是令人沮丧啊,但非常感谢您的帮助 问题是,即使我使用像 'auga' 之类的字符串或其他字符串,而不仅仅是 POST[name],它仍然会插入一个空白。我开始认为这是 phpmyadmin 的问题,而不是代码 您好,我已经尝试了您的 php 代码并稍作修改,请在此处查看 pastebin.com/4XjhX5bk 并分配$name=$_POST['version'];
而不是我的分配。如果您仍然得到空白字段,那么我认为您发布数据的方式有问题,所以请告诉我<form></form>
标签内的代码。
还有一件事,您是否尝试过使用我在上面发布的创建表查询创建表,然后尝试插入数据?以上是关于Mysql从php脚本插入空白字段,但不在phpmyadmin中?的主要内容,如果未能解决你的问题,请参考以下文章
为啥这个 PHP 脚本不会在 MySQL 数据库中插入表单数据?