[英]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);
// 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的第二个表中,该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.