这个问题已经在这里有了答案:

我知道这个问题来过多次,但是我找不到我的代码中的错误。 在我的更新分支中,每个$ stmt-> bindValue(...)返回TRUE,但是我捕获了pdo异常

SQLSTATE [HY093]:参数号无效:参数未定义

插入新条目可以正常工作。

在我的mysql数据库中,表“ system”的结构为:

id -> int(11), primary key
computer_name -> varchar(255)
cpu_speed -> int(11)
ram_size -> int(11)
mac_address -> varchar(255)
operating_system -> varchar(255)

我的错误抛出代码:

// Search for mac_address.
// If an entry with the same MAC exists update the entry.
// Else, create a new entry
$stmt = $pdo->prepare("SELECT * FROM system WHERE mac_address=:mac");
$stmt->bindValue(":mac", $mac_address, PDO::PARAM_STR);
$stmt->execute();
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);

// If no rows are returned, no entry exists => create a new one
if(empty($rows))
{  
  // Prepare statement
  $stmt = $pdo->prepare("INSERT INTO
       system(`computer_name`,`cpu_speed`,`ram_size`,`mac_address`, `operating_system`)
       VALUES(:computer_name, :cpu_speed, :ram_size, :mac_address, :operating_system)");
  $stmt->bindValue(":computer_name", $computer_name, PDO::PARAM_STR);
  $stmt->bindValue(":cpu_speed", $cpu_speed, PDO::PARAM_INT);
  $stmt->bindValue(":ram_size", $ram_size, PDO::PARAM_INT);
  $stmt->bindValue(":mac_address", $mac_address, PDO::PARAM_STR);
  $stmt->bindValue(":operating_system", $operating_system, PDO::PARAM_STR);
}
else  // Update existing entry
{
  //computer_name   cpu_speed   ram_size    mac_address     operating_system 
  $stmt = $pdo->prepare("UPDATE system
      SET computer_name=:computer_name,
          cpu_speed=:cpu_speed,
          ram_size=:ram_size,
          operating_system=:operating_sytem,
          mac_address=:mac_address_in
       WHERE mac_address=:mac_address_query");
  echo$stmt->bindValue(":computer_name", $computer_name, PDO::PARAM_STR);
  echo$stmt->bindValue(":cpu_speed", $cpu_speed, PDO::PARAM_INT);
  echo$stmt->bindValue(":ram_size", $ram_size, PDO::PARAM_INT);
  echo$stmt->bindValue(":mac_address_in", $mac_address, PDO::PARAM_STR);
  echo$stmt->bindValue(":operating_system", $operating_system, PDO::PARAM_STR);
  echo$stmt->bindValue(":mac_address_query", $mac_address, PDO::PARAM_STR);
}

// Execute the command
$stmt->execute();

#1楼 票数:2 已采纳

SQLSTATE[HY093]: Invalid parameter number: parameter was not defined

这意味着您有一个未定义的参数。 似乎您在这里遇到了错误operation_system operating_system=:operating_sytem,也许应该是operating_system=:operating_system, 这使一个缺少参数,因为在这里没有设置它是因为您拼错了一个单词。 请尝试检查您的prepare语句中的每个单词以及相应的bindValue

  ask by Incubbus translate from so

未解决问题?本站智能推荐:

1回复

SQLSTATE [HY093]:参数号无效:参数未定义PDO [重复]

这个问题已经在这里有了答案: “无效的参数编号:未定义参数”插入数据 4个答案 我正在尝试使用ajax使用PDO语句插入值。 但是每次都会抛出mysql错误。 缺了点什么!
2回复

SQLSTATE [HY093]:参数号无效:未定义参数(PDO)

我知道:这已经完成了死亡。 但是,相信我,我一直在研究如何解决这个问题。 我想要实现的是用于PDO的PDO MySQL数据库包装器,我可以将其合并到我的代码中。 我的主要问题源于两个特别的功能,以及我试图达到的参数的实际绑定。 我说两个函数而不是一个函数的原因是,尽管我付出了努力,但
1回复

我如何消除此错误:PDOException:SQLSTATE [HY093]:无效的参数编号:参数未定义

我有此错误:PDOException:SQLSTATE [HY093]:无效的参数编号:参数未定义。 这是代码:
1回复

警告:PDOStatement :: execute():SQLSTATE [HY093]:无效的参数编号:在第24行的C:\\ wamp \\ www \\ PDO.php中未定义参数

今天,我正在尝试我的代码,但遇到了这个错误:参数未定义...请帮助我: }?>
2回复

SQLSTATE [HY093]:无效的参数编号:未定义参数-尽管未发现不匹配项[关闭]

关闭。 这个问题是题外话。 它当前不接受答案。 了解更多 。 想改善这个问题吗? 更新问
1回复

SQLSTATE[HY093]: 无效的参数号:未定义参数 - php

我在创建网站时遇到了问题,我可以成功地将数据添加到每个工作正常的学生,但是我正在尝试创建一个页面,我可以在其中基本上搜索城市(我的 php 文档中的 város)他们住在里面,里面列出了我所有的学生数据。 我可以成功插入“város”,但是当我尝试读取数据时,它不起作用。 我得到的错误信息是:
1回复

PHP PDO /事务更新状态产生错误(SQLSTATE [HY093]:无效的参数号:未定义参数)[重复]

这个问题已经在这里有了答案: SQLSTATE [HY093]:参数号无效:参数未定义 2回答 在以下函数中,我有两个更新语句。 第一个执行正常,但第二个则不执行,从而产生错误(无效的参数编号)。 阈值是浮点型的(例如,0.55,最多两位),而“可能性”和“后果
1回复

尝试使用PDO插入时出错:PDOStatement :: execute():SQLSTATE [HY093]:参数号无效:参数未定义

我收到此错误:警告:PDOStatement :: execute():SQLSTATE [HY093]:参数号无效:参数未定义 数组([0] => HY093 [1] => [2] =>) 我看不到我失败的地方。