我在MySql数据库中有两个表,用于存储表单提交信息。第一个表包含表单中的联系信息,第二个用户源信息(即IP地址)。
我在PHP中创建一个日期时间,如下所示:
$timestamp = date('Y-m-d H:i:s');
然后,我将第一个表(成功)插入联系表单信息以及此日期时间。
现在,我想要做的是从第一个表中获取主键(自动递增整数),该表与此日期时间相关联。所以,我用这个字符串查询第一个表:$db_query = "SELECT `unique_id` FROM `leads_contact_info` WHERE `timestamp` = '$timestamp'";
这就是我的问题:当我从PHP查询表时,它总是返回' 0'。但是,如果我进入PHPMyAdmin中的第一个表,将日期时间值从给定行复制并粘贴到查询中,然后从PHPMyAdmin接口运行查询,它确实返回正确的值。
任何帮助都会非常感激,因为我要去,#34;我要把我的电脑扔到窗外,然后把它拿出来,"沮丧的阶段。
最佳
// Create timestamp
$timestamp = date('Y-m-d H:i:s');
// Create query to insert contact info into first table
$db_query = "INSERT INTO `leads_contact_info` (`unique_id`, `timestamp`, `first_name`, `last_name`, `company_name`, `business_type`, `website`, `phone`, `phone_ext`, `email`, `time_of_week`, `time_of_day`, `notes`) VALUES (NULL, '$timestamp', '$first_name', '$last_name', '$company_name', '$business_type', '$website', '$phone', '$phone_ext', '$email', '$time_of_week', '$time_of_day', '$notes')";
// Execute query
$db_query_result = $db_connection->query($db_query);
// Create query to get primary key from last insertion
$db_query = "SELECT `unique_id` FROM `leads_contact_info` WHERE `timestamp` = '$timestamp'";
// Execute query
$db_query_result = $db_connection->query($db_query);
// Create query to insert source info into second table
$db_query = "INSERT INTO `leads_source_info` (`unique_id`, `from_page`, `referrer`, `user_agent`, `ip_address`) VALUES ('$unique_id', '$this_page', '$referrer', '$user_agent', '$ip_address')";
// Execute query
$db_query_result = $db_connection->query($db_query);
// Create timestamp
$timestamp = date('Y-m-d H:i:s');
// Create query to insert contact info into first table
$db_query = "INSERT INTO `leads_contact_info` (`unique_id`, `timestamp`, `first_name`, `last_name`, `company_name`, `business_type`, `website`, `phone`, `phone_ext`, `email`, `time_of_week`, `time_of_day`, `notes`) VALUES (NULL, '$timestamp', '$first_name', '$last_name', '$company_name', '$business_type', '$website', '$phone', '$phone_ext', '$email', '$time_of_week', '$time_of_day', '$notes')";
// Execute query
$db_query_result = $db_connection->query($db_query);
// Get primary key from last query
$unique_id = mysqli_insert_id();
// Create query to insert source info into second table
$db_query = "INSERT INTO `leads_source_info` (`unique_id`, `from_page`, `referrer`, `user_agent`, `ip_address`) VALUES ('$unique_id', '$this_page', '$referrer', '$user_agent', '$ip_address')";
// Execute query
$db_query_result = $db_connection->query($db_query);
'$timestamp'
。 $mysqli->insert_id
和mysqli_insert_id($db_connection)
检索第一个表中唯一ID的值。两者首先返回1并跟踪脚本的执行(换句话说,数据插入到第二个表中,唯一ID为1,这与最近的记录的实际自动递增值不匹配。第一个表)。经过多次尝试,我终于决定为这个特殊问题选择一种解决方法。也就是说,如果有人提出答案或有其他解决方案,我想将问题保持打开状态。感谢所有试图提供帮助的人,特别是@SetSailMedia。
作为解决方法,我将第一个表中的DATETIME字段更改为TIMESTAMP,并将其设置为默认为当前时间戳。然后,我将主键字段的大小增加到,并在PHP中,通过$unique_id = time() + rand(1, 999999999)
创建了一个自定义整数唯一ID。我检查(通过while循环)以确保第一个表中不存在此唯一ID,然后触发插入查询。最后,我插入第二个表,其值与唯一ID相同。
同样,这不是原始问题的解决方案,我很想知道这里的问题是什么,但我必须继续这个项目。我希望其他人发现此处的信息和努力是有用的。
答案 0 :(得分:0)
为什么不使用mysql_insert_id()
(或数据库抽象层中的等效函数)?这会在成功插入后返回主键。
答案 1 :(得分:0)
在评论和您发布的代码中查看您的答案,我会看到问题出在哪里:
- 在第一个表中,您在unique_id字段中插入一个空值的记录,然后您尝试检索此唯一ID,但是您没有得到结果。
- 然后你发布了这个:
此时,我已经准备好在两个表上弹出一个自动递增的唯一ID,但我真的不愿意这样做。我觉得这个问题有一个解决方案。
存在问题,如果你可以在unique_id中传递一个null,那么insert是成功的但是该字段不是自动数字,那么该字段是not_null,如果是这样的话,它也不是主键。
当然SELECT失败了,因为没有什么可以返回的,还有mysqli_insert_id,因为第一个表中没有autonumerics。
如果您不想或不能使用自动数字,请查看uniqid功能。第二个表格不需要任何修改。