Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Can';t从PHP插入mysql自动增量行,但可以使用相同的语句从phpmyadmin手动插入_Php_Mysql_Insert_Phpmyadmin_Auto Increment - Fatal编程技术网

Can';t从PHP插入mysql自动增量行,但可以使用相同的语句从phpmyadmin手动插入

Can';t从PHP插入mysql自动增量行,但可以使用相同的语句从phpmyadmin手动插入,php,mysql,insert,phpmyadmin,auto-increment,Php,Mysql,Insert,Phpmyadmin,Auto Increment,所以我的问题是: 我无法从php中插入到自动递增列中 (unless I set the insert values to: '','','','$postdate','posttime'). 然而:当我在phpmyadmin中使用下面调试过的insert语句时,它运行起来没有问题。 因此,有一些东西阻止我从php代码中插入 这是我的代码: $qinsert = "INSERT INTO `post` (text,sender,text_stamp,post_date,post_ti

所以我的问题是:

我无法从php中插入到自动递增列中

(unless I set the insert values to: '','','','$postdate','posttime').
然而:当我在phpmyadmin中使用下面调试过的insert语句时,它运行起来没有问题。 因此,有一些东西阻止我从php代码中插入

这是我的代码:

$qinsert    =   "INSERT INTO `post` (text,sender,text_stamp,post_date,post_time) VALUES ('$message','$sender_id','$date','$postdate','$posttime')";
$finsert    =   mysql_query($qinsert);
$postID     =   mysql_insert_id();
这是调试器的输出:

 Date: Fri, 29 Mar 2013 11:02:53 -0400
 Sender: User's Name 
Message:
 Message Text
 Attachment: 
 Post-Date: 2013-03-29
 Post-Time: 08:02:55

 Q-INSRT: INSERT INTO `post` (text,sender,text_stamp,post_date,post_time) VALUES ('Message Text','User's Name ','Fri, 29 Mar 2013 11:02:53 -0400','2013-03-29','08:02:55')
  F-INST: 
  Post-ID: 

您需要转义字符串,
用户名
中只有一个引号。您也不应该使用
mysql\uuz
函数,它们已被弃用。但如果您坚持,请使用
mysql\u real\u escape\u string()
,例如:

$qinsert    =   "INSERT INTO `post` (text,sender,text_stamp,post_date,post_time) VALUES ('" . mysql_real_escape_string($message) . "','" . mysql_real_escape_string($sender_id). " ','$date','$postdate','$posttime')";
您可能应该转义所有字符串,而不仅仅是message和sender

理想情况下,您应该使用PDO,如下所示:

$dsn = 'mysql:dbname=testdb;host=127.0.0.1';
$user = 'dbuser';
$password = 'dbpass';

$dbh = new PDO($dsn, $user, $password);
$sth = $dbh->prepare(
  "INSERT INTO post (text,sender,text_stamp,post_date,post_time) VALUES " .
  "(:message, :sender_id, :date, :postdate, :posttime)"
);
$sth->execute(array(
  ':message' => $message,
  ':sender_id' => $sender_id,
  ':date' => $date,
  ':postdate' => $postdate,
  ':posttime' => $posttime
));

在将变量放入数组之前是否对其进行转义?我不确定您的示例查询是否替换了文本和用户名,或者是逐字复制粘贴的。我将假设是后者,因此请仔细查看您的查询:

[...] VALUES ('Message Text','User's Name ','Fri, [...]

“用户的名字”在中间有撇号,所以它破坏了查询。在将每个变量插入到查询中之前,请确保在每个变量上运行mysql\u real\u escape\u string($variable)

$message_text = mysql_real_escape_string($_POST['message_text']);
$user_name = mysql_real_escape_string($_POST['user_name']);
$query = "INSERT INTO table (text, username) values ('$message_text', '$user_name')";
mysql_query($query);
这就成功了:

require '../connect.php';
$email = file_get_contents('php://stdin');
preg_match_all("/(.*):\s(.*)\n/i", $email, $matches);

$message    = $matches[1][18];
$message    = str_replace('<HTML><HEAD></HEAD><BODY style="background-color:#ffffff">', '',$message);
$message    = explode('<',$message);
$message    = $message[0];
$sender     = $matches[2][2];
$sender     = explode('<',$sender); 
$sender_id  = $sender[0];

mysql_query("INSERT INTO `post` (`text`,`sender`,`text_stamp`,`post_date`,`post_time`) VALUES ('" . mysql_real_escape_string($message) . "','" . mysql_real_escape_string($sender_id) . "','" . mysql_real_escape_string($textdate) . "','$postdate','$posttime')") or die(mysql_error() . "<--There was error processing the query");
require'../connect.php';
$email=文件\u获取\u内容('php://stdin');
preg_match_all(“/(.*):\s(.*)\n/i“,$email,$matches);
$message=$matches[1][18];
$message=str_replace(“”,,$message);

$message=explode('并且,您正在应用任何mysql转义函数吗?我没有,我应该吗?。它们不再被维护。请参阅?改为了解,并使用或-将帮助您决定哪个。如果您选择PDO,。这不起作用,我在调试器中实际得到了“”,'',当我输入:$qinsert=“插入
post
(文本、发件人、文本戳、发布日期、发布时间)值(“.mysql\u real\u escape\u string($message)。”、“.mysql\u real\u escape\u string($sender\u id)。”、“.mysql\u real\u escape\u string($date)。”、“$postdate”、“$posttime”)"连接到mysql后,您是否正在调用
mysql\u real\u escape\u string
?如果没有连接,它将无法工作。是的,我的连接很好。我可以判断,因为我能够为$message、$sender\u id、$date as''、''插入空白记录,如上所述,我已经用PDO语法更新了我的响应。您真的应该使用它而不是
mysql
函数。我将保存此函数作为最后手段,但我有许多mysql函数可用于我拥有的另一个站点。我也使用相同的sytax用于此,但我无法使其工作:(这不起作用,当我为每个变量设置该函数时,我在调试器中实际得到了返回的“”、“”“”,您是否首先使用mysql\u connect()//mysql\u select\u db()连接到mysql??并确保连接成功?我没有为连接设置调试器,但我能够在php代码中插入空格来代替变量。这就是为什么我相信连接是可以的。另外,另一个网站使用相同的连接,只是具有不同的db名称和密码,所以我想为什么要修复一些未损坏的连接