php - 使用 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 表的外键?
解决方案
我找到了一个解决方案,结果是一个 SQL 问题:我更改了$update
字符串以选择StateID
where Level =<input type="text" name="level"...>
标签包含的任何内容。
$update = "UPDATE Persons SET Name = :name, StateID = (SELECT StateID FROM States WHERE Level = :level) WHERE PersonID = :pid";
推荐阅读
- r - 在 R 中使用 library earth 的 MARS 模型:为什么“cv_mars”和“mars1”都产生相同的结果?
- java - 插件:在项目结构中保护文件的最佳方法?
- javascript - 尝试运行和调试
- c++ - 在 QTableView 上绘制 QGraphicsLineItem
- python - 为什么我的程序不打印第 9 行而是打印第 7 行?
- sql - to_SQL nan 和 Null 值,仍然在 SQL 表中获取 'nan' 字符串文字
- node.js - 开发依赖项和 Cypress.io 中的依赖项之间的区别
- django - Wagtail 管理站点和 Django 管理站点之间的区别?
- git - 如何恢复使用 git 命令 'git clean -fdx' 删除的文件
- java - 在 Java 方法声明中引用子类