Обновите значения внешнего ключа с помощью PHP - PullRequest
1 голос
/ 14 марта 2019

Я застрял при обновлении таблицы значением из другой таблицы.Допустим, у меня есть следующие таблицы:

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, очевидно, неправильно, я попытался заменить его результатом из SELECT ...WHERE Level = :level, но безуспешно.Как я могу обновить внешний ключ таблицы Persons, основываясь на значении во вводе с name = "level"?

1 Ответ

0 голосов
/ 15 марта 2019

Я нашел решение, оно оказалось проблемой SQL: я изменил строку $update, чтобы выбрать StateID, где Level = все, что содержит тег <input type="text" name="level"...>.

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