Can';t从PHP插入mysql自动增量行,但可以使用相同的语句从phpmyadmin手动插入
所以我的问题是: 我无法从php中插入到自动递增列中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
(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名称和密码,所以我想为什么要修复一些未损坏的连接