簡體   English   中英

使用多個 WHERE 和 SELECT 條件更新 - MySql

[英]UPDATE with multiple WHERE and SELECT condition - MySql

所以,我有兩個表ativoscolaboradores ,它們在我的更新頁面上由id_colaborador (FK)鏈接,我可以更改id_colaborador但不是更改IDwrite 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM