将在PHP中创建的日期时间插入MySQL表后,在使用相同的变量值

时间:2015-08-20 22:03:01

标签: php mysql datetime phpmyadmin

问题描述

我在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);

编辑脚本(以下来自@SetSailMedia的建议)

// 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'
  • PHP端的各种日期格式转换(同样,插入查询成功)。
  • 在选择查询中添加while while sleep(1)while(查询结果== 0)。
  • 尝试使用$mysqli->insert_idmysqli_insert_id($db_connection)检索第一个表中唯一ID的值。两者首先返回1并跟踪脚本的执行(换句话说,数据插入到第二个表中,唯一ID为1,这与最近的记录的实际自动递增值不匹配。第一个表)。

解决方法(不是原始问题的解决方案)

经过多次尝试,我终于决定为这个特殊问题选择一种解决方法。也就是说,如果有人提出答案或有其他解决方案,我想将问题保持打开状态。感谢所有试图提供帮助的人,特别是@SetSailMedia。

作为解决方法,我将第一个表中的DATETIME字段更改为TIMESTAMP,并将其设置为默认为当前时间戳。然后,我将主键字段的大小增加到,并在PHP中,通过$unique_id = time() + rand(1, 999999999)创建了一个自定义整数唯一ID。我检查(通过while循环)以确保第一个表中不存在此唯一ID,然后触发插入查询。最后,我插入第二个表,其值与唯一ID相同。

同样,这不是原始问题的解决方案,我很想知道这里的问题是什么,但我必须继续这个项目。我希望其他人发现此处的信息和努力是有用的。

2 个答案:

答案 0 :(得分:0)

为什么不使用mysql_insert_id()(或数据库抽象层中的等效函数)?这会在成功插入后返回主键。

答案 1 :(得分:0)

在评论和您发布的代码中查看您的答案,我会看到问题出在哪里:

- 在第一个表中,您在unique_id字段中插入一个空值的记录,然后您尝试检索此唯一ID,但是您没有得到结果。

- 然后你发布了这个:

  

此时,我已经准备好在两个表上弹出一个自动递增的唯一ID,但我真的不愿意这样做。我觉得这个问题有一个解决方案。

存在问题,如果你可以在unique_id中传递一个null,那么insert是成功的但是该字段不是自动数字,那么该字段是not_null,如果是这样的话,它也不是主键。

当然SELECT失败了,因为没有什么可以返回的,还有mysqli_insert_id,因为第一个表中没有autonumerics。

如果您不想或不能使用自动数字,请查看uniqid功能。第二个表格不需要任何修改。