【问题标题】:PHP - A non well formed numeric value encounteredPHP - 遇到格式不正确的数值
【发布时间】:2020-07-28 10:49:08
【问题描述】:

我尝试在 PHP 中执行 MySQL 查询(使用 Laravel Eloquent)来插入/更新包含文本 (json) 的表列MySQL 会抛出错误“遇到格式不正确的数值”。

表格列:

ALTER TABLE test ADD COLUMN `indicator` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL;

插入:

INSERT INTO test (`indicator`) VALUES ("{\"legend_label\":\"Received\",\"legend_label_id\":8341,\"table_key\":\"created\"}");

Laravel 代码:

$updateQuery = "UPDATE {$tableInfo->{"Table"}} SET `{$columnName}` = :{$columnName}";
try {
  $rowUpdated = DB::connection('mysql')->update($updateQuery, [$columnName => $columnValue]);
  if (!is_int($rowUpdated)) {
    Log::warning("Failed updating column {$columnName} in {$tableInfo->{"Table"}}");
  }
} catch (QueryException $ex) {
  Log::error("ERROR when executing query");
  Log::error("DB ERROR {$ex->getMessage()}");
  Log::error("Data: " .print_r($columnValue, true));
  Log::error("Type: " .gettype($columnValue));
}

使用 UPDATE 或 INSERT 无关紧要。两者都抛出相同的异常。 使用 MySQL Workbench 时工作。不适用于 PHP。

请帮忙!

【问题讨论】:

  • ..在 PHP 中不起作用.... php 代码在哪里?
  • 您是否尝试打印您准备好的 sql 语句?
  • 我很确定“遇到格式不正确的数值”是 php 错误,而不是 mysql 错误。
  • 准备好的语句看起来不错。 UPDATE test SET `indicator` = :indicator
  • 你能解释一下这一行吗 - $updateQuery = "UPDATE {$tableInfo->{"Table"}} SET {$columnName} = :{$columnName}";为什么两者都是 columnName?

标签: php mysql laravel eloquent


【解决方案1】:

我发现了问题。这是替换的关键,无法正常工作。查询是这样工作的:

UPDATE {$tableInfo->{"Table"}} SET `{$columnName}` = :columnVal

显然 PHP 不希望我在准备好的语句中使用列名。

【讨论】:

    猜你喜欢
    • 2013-05-27
    • 2010-11-19
    • 1970-01-01
    • 1970-01-01
    • 2019-02-15
    • 2012-07-28
    • 2014-09-18
    相关资源
    最近更新 更多