Php 日期类型的Mysqli更新查询按代码失败,按命令行成功

Php 日期类型的Mysqli更新查询按代码失败,按命令行成功,php,mysqli,sql-update,Php,Mysqli,Sql Update,此查询返回0个受影响的行 mysqli_query($conn, "UPDATE dates SET date = '$date' WHERE url = '". mysqli_real_escape_string($conn, $url) ."'") 如果我打印出sql查询,它如下所示- UPDATE dates SET date = '2012-10-25' WHERE url = 'http://foo.com' 如果我在命令行上手动执行此操作,效果会很好 为什么我的mysqli_查询

此查询返回0个受影响的行

mysqli_query($conn, "UPDATE dates SET date = '$date' WHERE url = '". mysqli_real_escape_string($conn, $url) ."'")
如果我打印出sql查询,它如下所示-

UPDATE dates SET date = '2012-10-25' WHERE url = 'http://foo.com'
如果我在命令行上手动执行此操作,效果会很好

为什么我的mysqli_查询会失败

编辑:

如果我显示警告,我会得到-

Warning (1265): Data truncated for column 'date' at row 1
我的日期似乎格式正确。为什么它们会被截断?我如何解决这个问题?

试试看

  printf("Affected rows : %d\n", mysqli_affected_rows($conn));

我认为没有必要将该连接资源传递给mysqli_query和mysqli_real escape_字符串,只需将其传递到select mysqli_select_db中,就像mysqli_select_db‘database’、$conn

一样,然后您必须检查在该查询中传递的每个变量的值:$date、$conn或$url,并确保每个变量都返回任何值。但是根据您的错误行,我认为它将是您的$date,可能没有返回到该变量的值,或者日期的格式错误。这就是查询返回该错误的原因


尝试回显$date的值。

回显SQL了吗?它看起来像您期望的吗?希望您也转义$date,或者它是生成的代码,这样您就知道它是安全的。@andrewsi,是的,上面的查询是echo@Rudu,是的,代码生成,谢谢!字符串mysqli\u real\u escape\u字符串mysqli$link,字符串$escapestr@allanb printf%s\n,mysqli\u info$conn;中有什么内容?匹配的行:1已更改:0警告:1I收到警告1265:第1行“日期”列的数据被截断作为警告。我打印的查询来自回显。这绝对是有价值的。如果我接受该查询并在命令行上运行它,它就可以正常工作。我使用了SHOW WARNINGS,它返回了警告1265:第1行“date”列的数据被截断。@allanb:Ah,对不起。尝试从该查询中选择任何数据。如果它没有返回任何值,那么它可能是您的连接。