具有多个WHERE和SELECT条件的UPDATE-MySQL

时间:2018-12-05 11:31:56

标签: php mysql

因此,我有两个表ativoscolaboradores,它们在更新页面上由id_colaborador (FK)链接,我可以更改id_colaborador,但不能更改更改要与该ID匹配的write the name的{​​{1}},但是我认为我需要多个ID条件和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 = ?";

但这给了我以下错误:

  

警告:PDO :: prepare()期望参数2为数组,在第120行的C:\ xampp \ htdocs \ gestao \ Colaboradores \ ativo_update.php中给出的字符串

     

致命错误:未捕获错误:在C:\ xampp \ htdocs \ gestao \ Colaboradores \ ativo_update.php:121布尔值上调用成员函数execute()堆栈跟踪:#0 {main}抛出在C:\ xampp中第121行的\ htdocs \ gestao \ Colaboradores \ ativo_update.php

2 个答案:

答案 0 :(得分:1)

您可以使用子查询,因为我了解您要按名称更新哪个名称不在同一表中,可以检查以下查询:

$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 = ?";

答案 1 :(得分:0)

此查询将允许您基于从表单输入的名称来更新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中代替子查询使用。这样会更强大,并且不会让您意外地误识别记录。