gpt4 book ai didi

php - 将PHP创建的日期时间插入MySQL表后,使用相同的变量值查询同一个表时没有返回结果

转载 作者:行者123 更新时间:2023-11-29 22:06:14 24 4
gpt4 key购买 nike

问题描述

我在 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 界面运行查询,它确实返回正确的值。

当我进入“我要把我的电脑扔出窗外,然后我带着它”的沮丧阶段时,任何帮助将不胜感激。

最佳

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

原始脚本

// 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 循环(查询结果 == 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 相同的值插入到第二个表中。

再说一次,这不是原始问题的解决方案,我很好奇这里的问题是什么,但我必须继续这个项目。我确实希望其他人发现本文中的信息和努力有用。

最佳答案

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

关于php - 将PHP创建的日期时间插入MySQL表后,使用相同的变量值查询同一个表时没有返回结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32129151/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com