早上好,拼命尝试解决我在将空白日期值插入MySQL 5.7.19时遇到的问题,并在3天后转到此处寻求帮助。
将DB设置为允许NULL - 默认为NULL,前端字段有时会被填充,更常见的不是空值。
弹出错误:
无法执行SQL语句:日期值不正确:''对于专栏' signedupdate'在第1行
插入
$lastInsertId = $this->GetConnection()->GetLastInsertId();
$sql = sprintf("INSERT INTO tbl_lead (client_id, signedupdate, plan_type) VALUES(%d, '%s', '%s');", $lastInsertId, $rowData['signedupdate'], $rowData['plan_type']);
$this->GetConnection()->ExecSQL($sql);
更新
$sql = sprintf("UPDATE tbl_lead SET signedupdate = '%s', plan_type = '%s'WHERE client_id = %d;", $rowData['signedupdate'], $rowData['plan_type']);
$this->GetConnection()->ExecSQL($sql);
任何人都可以看到我可能出错的地方吗?
答案 0 :(得分:0)
在执行查询字符串之前尝试回显,并在phymyadmin中复制/粘贴该回显查询并检查查询中的错误
$lastInsertId = $this->GetConnection()->GetLastInsertId();
$sql = sprintf("INSERT INTO tbl_lead (client_id, signedupdate, plan_type) VALUES(%d, '%s', '%s');", $lastInsertId, $rowData['signedupdate'], $rowData['plan_type']);
echo $sql;
$this->GetConnection()->ExecSQL($sql);
答案 1 :(得分:0)
在SQL中(如在PHP中),NULL
值与碰巧具有字母N-U-L-L的常规文本变量之间存在很大差异。只要源变量是实际null
(而不是文本'null
')并且您按预期使用库,任何体面的数据库库都会自动处理。
您正在使用自定义自定义数据库库,因此很难说它是哪种情况。如果库不是太糟糕,它应该提供如下语法:
$sql = 'INSERT INTO tbl_lead (client_id, signedupdate, plan_type) VALUES (?, ?, ?)';
$this->GetConnection()->ExecSQL($sql, [
$lastInsertId,
$rowData['signedupdate'],
$rowData['plan_type']
]);
当然,不一定是这个语法。请参阅库文档检查其源代码。
如果它是一个糟糕的库,它只会提供转义功能。如果这些函数自动添加引号,您可能会很幸运,例如:
$sql = sprintf('INSERT INTO tbl_lead (client_id, signedupdate, plan_type) VALUES(%s, %s, %s)',
$this->GetConnection()->EscapeValue($lastInsertId),
$this->GetConnection()->EscapeValue($rowData['signedupdate']),
$this->GetConnection()->EscapeValue($rowData['plan_type'])
);
$this->GetConnection()->ExecSQL($sql);
再次,我刚刚编写了语法。
否则,您必须自己处理所有事情:
$sql = sprintf('INSERT INTO tbl_lead (client_id, signedupdate, plan_type) VALUES(%s, %s, %s)',
$lastInsertId===null ? 'NULL' : "'" . $this->GetConnection()->EscapeValue($lastInsertId) . "'",
$rowData['signedupdate']===null ? 'NULL' : "'" . $this->GetConnection()->EscapeValue($rowData['signedupdate']) . "'",
rowData['plan_type']===null ? 'NULL' : "'" . $this->GetConnection()->EscapeValue($rowData['plan_type']) . "'"
);
$this->GetConnection()->ExecSQL($sql);
如果图书馆甚至没有提供转义功能,你应该在这里停下来切换到例如PDO。无论如何切换都可能是一个好主意 - 根据我的经验,StrangelyCasedLibraries()往往具有可疑的质量。