繁体   English   中英

将PHP中创建的datetime插入MySQL表后,使用相同变量值查询同一表时,不会返回任何结果

[英]After inserting datetime created in PHP to MySQL table, no result is returned when same table is queried with same variable value

问题描述

我在MySql数据库中有两个表,用于存储表单提交信息。 第一个表包含来自表单的联系信息,第二个表包含用户来源信息(即IP地址)。

我正在像这样在PHP中创建日期$timestamp = date('Ymd H:i:s');$timestamp = date('Ymd H:i:s');

然后,我将成功地将联系表单信息以及该日期时间插入到第一个表中。

现在,我要做的是从与此日期时间相关联的第一个表中获取主键(自动递增整数)。 因此,我使用以下字符串查询第一个表: $db_query = "SELECT `unique_id` FROM `leads_contact_info` WHERE `timestamp` = '$timestamp'";

这就是我的问题所在:当我从PHP查询表时,它始终返回“ 0”。 但是,如果我进入PHPMyAdmin的第一个表,将给定行中的datetime值复制并粘贴到查询中,然后从PHPMyAdmin接口运行查询,则确实会返回正确的值。

当我进入“沮丧的阶段”时,任何帮助将不胜感激。

最好

注意:在以下脚本中,我具有用于错误处理/报告的控制结构,为清楚起见,已将其省略。 可以说,它们起作用了,而不是问题的根源。

原始剧本

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

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

经过多次尝试,我最终决定针对此特定问题选择解决方法。 就是说,如果有人想出答案或有其他解决方案,我想提一下问题。 感谢所有尝试提供帮助的人,尤其是@SetSailMedia。

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

再说一次,这不是解决原始问题的方法,我很想知道问题出在哪里,但是我必须继续进行这个项目。 我确实希望其他人能从中找到有用的信息和努力。

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

在评论中查看您的答案以及您发布的代码,我发现问题出在哪里:

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

-然后,您发布以下内容:

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

问题就出在这里,如果您可以在unique_id中传递一个null,则插入成功,但该字段不是自动数字,则该字段不是not_null;如果是这样,它也不是主键。

当然,SELECT失败是因为没有东西要返回,还有mysqli_insert_id也是因为第一个表中没有自动数字。

如果您不希望或不能使用自动数字,请查看uniqid函数。 第二张表不需要任何修改。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM