[英]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.