Php Datetime字段在MySQL中更新时不会更改

Php Datetime字段在MySQL中更新时不会更改,php,mysql,timestamp,mysqli,Php,Mysql,Timestamp,Mysqli,我已经建立了一个数据库,这是其中一个表: +-------------------------+------------+------+-----+---------------------+-------+ | Field | Type | Null | Key | Default | Extra | +-------------------------+------------+------+-----+--------

我已经建立了一个数据库,这是其中一个表:

+-------------------------+------------+------+-----+---------------------+-------+
| Field                   | Type       | Null | Key | Default             | Extra |
+-------------------------+------------+------+-----+---------------------+-------+
| id                      | char(23)   | NO   | PRI | NULL                |       | 
| claim_date              | timestamp  | NO   |     | CURRENT_TIMESTAMP   |       | 
| banned                  | tinyint(1) | NO   |     | NULL                |       | 
| available_downloads     | tinyint(4) | NO   |     | 10                  |       | 
| last_download_attempt   | datetime   | NO   |     | NULL                |       | 
| last_activation_attempt | datetime   | NO   |     | NULL                |       | 
| download_exp_date       | timestamp  | NO   |     | 0000-00-00 00:00:00 |       | 
| available_activations   | tinyint(4) | NO   |     | 5                   |       | 
| os_version              | tinyint(1) | NO   |     | NULL                |       | 
+-------------------------+------------+------+-----+---------------------+-------+
问题是:每当我尝试使用mysqli_stmt和mysqli->query用新值更新记录时,除了日期时间值之外,所有值都会更改。 我使用的查询是

$stmt = $this->db->prepare('UPDATE licences SET available_activations=available_activations-1, last_activation_attempt=? WHERE id=?');
$stmt->bind_param("ss", date("Y-m-d H:i:s"), $licence_id);
$stmt->execute();
可用\u激活值降低,但最后一次\u激活\u尝试不会移动。我甚至尝试用Y-m-dh-I-s和timestamp格式硬编码时间值,我尝试将数据类型更改为timestamp,但仍然无效。当我在mysql控制台中输入相同的查询时,它工作正常,但php似乎无法处理它。在这种情况下我能做什么

更新
最奇怪的是——这段代码被外部应用程序称为类方法,当我从自定义php代码中调用它时,它可以正常工作,可用的\u激活和上次的\u激活\u尝试值都会更改,但当我使用此应用程序时,只有可用的\u激活值会更改。它使用$u POST数据。

当我尝试重新创建时,我可以让它工作。一些想法:检查prepare、bind_param和execute调用是否失败


在这种情况下,在prepared语句中简单地将最后一次激活尝试设置为NOW而不是绑定到date值不是更容易吗?

当我尝试重新创建时,我可以让它工作。一些想法:检查prepare、bind_param和execute调用是否失败


在这种情况下,在prepared语句中简单地将最后一次激活尝试设置为NOW而不是绑定到date值不是更容易吗?

我没有太多时间进行测试,但尝试使用MySQL的时间戳格式

$stmt->bind_param("ss", date("YmdHis"), $licence_id);

我不记得很清楚,但我认为MySQL更喜欢这种方式,即使它以Y-m-d H:I:s格式输出。

我没有太多时间进行测试,但尝试使用MySQL的时间戳格式

$stmt->bind_param("ss", date("YmdHis"), $licence_id);

我不记得很清楚,但我认为MySQL更喜欢这种方式,即使它以Y-m-d H:I:s格式输出。

在bind_paramss…,你确定你想要ss作为第一个参数吗?好的,可用类型的状态是I、d、s或b-并且你有ss。是的,如果你把字符串作为日期传递,你必须选择s,如果它是按时间戳传递的,您使用i.@Koyot:有任何错误/警告吗?echo$this->db->错误;echo$this->db->get_warnings->message;好的,叫我船长很明显,但是你能帮我检查一下echo或error_log吗dateY-m-d H:i:s和$license_id的实际值/返回值在两种情况下从你的自定义代码和应用程序?在bind_paramss…,你确定要ss作为第一个参数吗?好的,可用类型的状态是i,d,是的,如果你把字符串作为日期传递,你必须选择s,如果它是按时间戳传递的,你可以使用i。@Koyot:有任何错误/警告吗?echo$this->db->错误;echo$this->db->get_warnings->message;好的,叫我船长很明显,但是你能帮我检查一下echo或error_log吗?dateY-m-d H:i:s和$license_id在两种情况下的实际值/返回值,无论是从你的自定义代码还是从应用程序?正如我前面提到的,查询肯定有效,因为可用的_downloads值下降,datetime值仍然是0000-00-00:00:00。尝试了NOW和CURRENT_时间戳,但所有这些都不起作用。如果NOW失败,则您的查询可能失败。检查它是否失败。正如我前面提到的,查询肯定会工作,因为可用的\u downloads值会下降,datetime值仍然是0000-00-00:00:00。尝试了NOW和CURRENT_时间戳,但所有这些都不起作用。如果NOW失败,则您的查询可能失败。检查它是否失败。不,还是给我手指不,还是给我手指