2013-04-05 73 views
-1

我一直在试图弄清楚为什么这个函数在chrome上工作,而不是在firefox上。mysql_insert_id函数返回0

我有一个自动增量字段,是我的主键,我得到我的ID。这是我的代码。

if (isset($_GET['id'])) { 
    $id = $_GET['id']; 
} else { 
    $id = mysql_insert_id(); 
    echo $id; 
} 

我试过把我的连接放在函数中,如下所示,但它仍然不起作用。任何指针将不胜感激。另外,我知道mysqli函数,因为用户的设置很老,所以我正在使用这些函数。

$id = mysql_insert_id($conn); 

这是我的代码,正在做插入。如果你已经做了与当前连接的INSERT查询

sprintf("INSERT INTO `trade_show_orders` (`SetupDate`,`SetupEndDate`,`ShowName`,`Location`,`Literature`,`StartDate`,`EndDate`,`Attendees`,`Projected`,`File`,`Giveaways`,`AddressBox`,`LocationType`,`Title`,`FirstName`,`LastName`,`Email`,`AddressOne`,`AddressTwo`,`Zip`,`Special`,`OrderDate`,`ShippingLocation`,`ShippingAddressOne`,`ShippingAddressTwo`,`ShippingZip`,`ShippingSpecial`) VALUES ('$setupDate','$endSetup','%s','%s','$values','$eventStart','$eventEnd','%d','%d','".basename($_FILES['fileUpload']['name'])."', '%s','off','%s','%s','%s','%s','%s','%s','%s','%d','%s',NOW(),'%s','%s','%s','%d','%s')", mysql_real_escape_string($_POST['showName']), mysql_real_escape_string($_POST['location']), $_POST['numberAttendees'], $_POST['visitors'], mysql_real_escape_string($_POST['giveaways']), mysql_real_escape_string($_POST['locationType']), mysql_real_escape_string($_POST['personalTitle']), mysql_real_escape_string($_POST['personalFirstName']), mysql_real_escape_string($_POST['personalLastName']), mysql_real_escape_string($_POST['personalEmail']), mysql_real_escape_string($_POST['personalAddressOne']), mysql_real_escape_string($_POST['personalAddressTwo']), $_POST['personalZip'], mysql_real_escape_string($_POST['personalSpecial']), mysql_real_escape_string($_POST['shippingLocation']), mysql_real_escape_string($_POST['shippingAddressOne']), mysql_real_escape_string($_POST['shippingAddressTwo']), $_POST['shippingZip'], mysql_real_escape_string($_POST['shippingSpecial'])); 
+1

该功能根本不依赖于浏览器。它只取决于你是否在数据库中插入了某些东西。如果你还没有插入一个东西,当然你会得到一个0. – 2013-04-05 15:01:22

+0

嗯,我可以看到它的工作原理是Chrome而不是Firefox。我知道这应该不重要,但它是我所得到的。 – wowzuzz 2013-04-05 15:02:08

+2

事实上,它可以在一个浏览器而不是另一个浏览器中工作的唯一方式是如果一个浏览器向服务器发送不同的信息。所以你错过了一些关键的组件来解决这个问题:JavaScript错误,JavaScript代码和数据发布(也是接受服务器上的帖子的代码) – Kato 2013-04-05 15:02:28

回答

2

mysql_insert_id()只会返回一个ID。这意味着它不会从“三次点击”之前的页面请求中返回一个ID。它不会返回由相同执行的其他脚本完成的ID,因为这是通过与mysql不同的连接完成的。

因此,显示实际进行插入的代码的其余部分。 PHP不应该在乎它在远程运行的浏览器。就PHP而言,它只是一个包含一些数据的HTTP请求。如果存在特定于浏览器的问题,则会出现在某些客户端代码中,例如,一些错误的JavaScript做AJAX请求,并没有正确填写一个字段。

+0

查看顶部的编辑。 – wowzuzz 2013-04-05 15:09:19

+0

您是否检查查询是否成功?例如'$ result = mysql_query($ sql)或死(mysql_error())'? – 2013-04-05 15:11:00

+0

是的,它确实成功了。我已经在插入物上测试了很多次。 – wowzuzz 2013-04-05 15:11:46

0

原来,它与我的插入无关。

显然,当您在Firefox,IE中使用表单提交图像时。它将图像从“submit”重命名为“submit_x”或“submit_y”

Chrome和Safari会同时提交submit和submit_x,submit_y和图像。

Firefox和IE 7,8,9只查找submit_x和submit_y,这解释了它只能在chrome上工作的原因。