[英]UPDATE with multiple WHERE and SELECT condition - MySql
所以,我有兩個表ativos
和colaboradores
,它們在我的更新頁面上由id_colaborador (FK)
鏈接,我可以更改id_colaborador
但不是更改ID
我write the name
與該ID
匹配write the name
,但我認為我需要多個WHERE
條件和SELECT
,有人可以幫我嗎? 謝謝! 我有以下代碼要更新
$sql = "UPDATE ativos SET ativo = ?, comentario = ?, data_aquisicao = ?, localizacao = ?, fabricante = ?, modelo = ?, imei = ?,
numero_serie = ?, ativo_sap = ?, anexo_a = ?, evento = ?, data_evento = ?, SELECT id_colaborador FROM colaboradores WHERE nome = ? AND WHERE id_ativo = ?";
更新
我已經嘗試將這兩個語句分開,如下所示:
$sql = "UPDATE ativos SET ativo = ?, comentario = ?, data_aquisicao = ?, localizacao = ?, fabricante = ?, modelo = ?, imei = ?,
numero_serie = ?, ativo_sap = ?, anexo_a = ?, evento = ?, data_evento = ?, id_colaborador = ? WHERE id_ativo = ?";
$sql2 = "SELECT id_colaborador FROM colaboradores WHERE nome = ?";
$q = $pdo->prepare($sql,$sql2);
但它給了我以下錯誤:
警告:PDO::prepare() 期望參數 2 是數組,字符串在 C:\\xampp\\htdocs\\gestao\\Colaboradores\\ativo_update.php 第 120 行中給出
致命錯誤:未捕獲的錯誤:調用 C:\\xampp\\htdocs\\gestao\\Colaboradores\\ativo_update.php:121 中布爾值的成員函數 execute() 堆棧跟蹤:#0 {main} throw in C:\\xampp\\htdocs\\第 121 行上的 gestao\\Colaboradores\\ativo_update.php
您可以使用子查詢,因為我知道您想按名稱更新不在同一個表中的名稱,您可以檢查下面的查詢:
$sql = "UPDATE ativos SET ativo = ?, comentario = ?, data_aquisicao = ?, localizacao = ?, fabricante = ?, modelo = ?, imei = ?,
numero_serie = ?, ativo_sap = ?, anexo_a = ?, evento = ?, data_evento = ? WHERE id_colaborador in (SELECT id_colaborador FROM colaboradores WHERE nome = ?) and id_ativo = ?";
@ADyson 在評論中有解決方案,它也按名稱更新 id_colaborador:
$sql = "UPDATE ativos SET ativo = ?, comentario = ?, data_aquisicao = ?, localizacao = ?, fabricante = ?, modelo = ?, imei = ?, numero_serie = ?, ativo_sap = ?, anexo_a = ?, evento = ?, data_evento = ?, id_colabarador = (SELECT id_colaborador FROM colaboradores WHERE nome = ? LIMIT 1) WHERE id_ativo = ?";
此查詢將允許您根據從表單輸入的名稱更新 ativos 表中的 id_colabarador:
$sql = "UPDATE ativos SET ativo = ?, comentario = ?, data_aquisicao = ?, localizacao = ?, fabricante = ?, modelo = ?, imei = ?, numero_serie = ?, ativo_sap = ?, anexo_a = ?, evento = ?, data_evento = ?, id_colabarador = (SELECT id_colaborador FROM colaboradores WHERE nome = ? LIMIT 1) WHERE id_ativo = ?";
但請注意,如果名稱在 colabarador 表中不是唯一的,則有可能意外返回錯誤的 ID。
正如評論中提到的,我強烈建議您重新設計 GUI,以便用戶可以使用名稱進行選擇,但在后台存儲與所選記錄相關的 ID,以便可以傳遞 ID直接從表單到 PHP,然后在 SQL 中使用來代替子查詢。 這將更加強大,並且不會讓您對記錄的意外錯誤識別持開放態度。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.