首页 > 解决方案 > 使用 PHP 更新外键值

问题描述

我坚持用另一个表中的值更新一个表。可以说我有以下表格:

Persons table
PersonId (pk), 
Name, 
StateId (fk)

States table 
StateId (pk), 
Level

我在两个输入中显示名称及其对应的级别,使用以下代码获取人员:

$sel = "SELECT Name, Level FROM Persons P JOIN States S ON P.StateID = S.StateID WHERE PersonID = :pid";
$stm = $pdo->prepare($sel);
$stm->execute(array(":pid" => $_GET['personId'])); // personId coming from calling page
$person = $stm->fetch(PDO::FETCH_ASSOC);

该人显示在以下输入中(未显示带有 personId 的隐藏输入)

<input type="text" name="person" value=" <?php echo($person['Name']) ?>">
<input type="text" name="level" value=" <?php echo($person['Level']) ?>">

更新时我运行以下查询

$update = "UPDATE Persons SET Name = :name, Level = :level WHERE PersonID = :pid"; // Level = :level wont work
$stm = $pdo->prepare($update);
$stm->execute(array(':pid'   => $_POST['personId'],
		    ':name'  => $_POST['name'], 
		    ':level' => $_POST['level']));  // again, not correct

Level = :level显然是错误的,我试图用 a 的结果替换它SELECT ...WHERE Level = :level但没有成功。如何根据输入中 name="level" 的值更新 Persons 表的外键?

标签: phpmysqlsql-updateforeign-keys

解决方案


我找到了一个解决方案,结果是一个 SQL 问题:我更改了$update字符串以选择StateIDwhere Level =<input type="text" name="level"...>标签包含的任何内容。

$update = "UPDATE Persons SET Name = :name, StateID = (SELECT StateID FROM States WHERE Level = :level) WHERE PersonID = :pid";

推荐阅读