【问题标题】:Update Query using Select name attribute使用选择名称属性更新查询
【发布时间】:2018-03-24 08:08:56
【问题描述】:

我正在尝试使用表单上选择框的名称属性来使更新查询工作。一切都传递到 $_POST 并且 INSERT 查询工作正常,但我无法弄清楚为什么我的 if 语句的更新部分没有传递到我的数据库。非常感谢任何建议。

<?php

global $wpdb;

$Call_Number = $_POST['Call_Number'];
$datas = $_POST['REG'];
$columns = implode(",",array_keys($datas));
$values = implode("','",$datas);

$result = $wpdb->get_results ("SELECT Call_Number FROM DG_Pro_Coach WHERE Call_Number = '".$Call_Number."'");

if (count ($result) > 0) {
    $row = current ($result);
    $wpdb->query ("UPDATE DG_Pro_Coach SET ".$columns."='".$values."' WHERE Call_Number = '".$Call_Number."'");
} else {
    $wpdb->query("INSERT INTO DG_Pro_Coach (".$columns.",Call_Number ) VALUES ('".$values."','$Call_Number' )");
}

?>

【问题讨论】:

  • 与问题无关,但很重要:请parameterize your queries
  • 你的更新子句语法错误应该是这个UPDATE t1 SET col1 = val1, col2 = val2 where conditions,你的是UPDATE t1 SET col1, col2 = val1, vla2 where condition

标签: php html sql forms sql-update


【解决方案1】:

问题

您的查询应如下所示:

UPDATE database SET column1=value1, column2=value2(...) WHERE condition

但它看起来像这样:

UPDATE database SET column1,column2(...) = value1,value2(...) WHERE condition

解决方案

<?php

global $wpdb;

$Call_Number = $_POST['Call_Number'];
$datas = $_POST['REG'];
$columns = implode(",",array_keys($datas));
$values = implode("','",$datas);
$updatelist = "";
foreach($datas as $key=>$value){
    $updatelist .= $key."=".$value.",";
}
$updatelist = substr($updatelist,0,strlen($updatelist)-1);

$result = $wpdb->get_results ("SELECT Call_Number FROM DG_Pro_Coach WHERE Call_Number = '".$Call_Number."'");

if (count ($result) > 0) {
    $row = current ($result);
    $wpdb->query ("UPDATE DG_Pro_Coach SET ".$updatelist."' WHERE Call_Number = '".$Call_Number."'");
} else {
    $wpdb->query("INSERT INTO DG_Pro_Coach (".$columns.",Call_Number ) VALUES ('".$values."','$Call_Number' )");
}

?>

【讨论】:

  • 感谢您的输入,从逻辑上讲,代码非常有意义,但是当我尝试使用建议页面停止工作的解决方案时(错误 500)。我尝试了几种方法来调整代码,但没有任何运气。
  • 没有错误,删除 UPDATE 查询本身并不能解决问题,所以我假设它一定是 PHP 的问题
  • @Nick 通过将其添加到您的代码来激活您的 php 错误输出:ini_set("display_errors", 1);error_reporting(E_ALL);
  • 是的,我有大约 50 个这样的选择框名称 (name="REG[something]"),我的 INSERT 查询没有问题。
  • 报错显示:无效的脚本解释器,脚本语法错误&脚本试图使用服务器上未安装的模块,
【解决方案2】:

您的更新查询语法错误,因为您以错误的方式包含 PHP 数组中的数据。

对于那些输入参数:

$Call_Number = '123456789';
$datas = array('one' => 1, 'two' => 2);  

此查询已创建:

UPDATE DG_Pro_Coach SET one,two='1','2' WHERE Call_Number = '123456789'

可能的解决方案:

$update_array = array();
foreach ($datas as $column=>$value) {
  $update_array[] = "$column = '$value'";
}
$update_string = implode(', ', $update_array);

$wpdb->query ("UPDATE DG_Pro_Coach SET ".$update_string.' WHERE Call_Number = '".$Call_Number."'");

【讨论】:

    【解决方案3】:

    非常感谢所有帮助,这是有效的代码。

    <?php
    
    global $wpdb;
    
    $Call_Number = $_POST['Call_Number'];
    $datas = $_POST['REG'];
    $columns = implode(",",array_keys($datas));
    $values = implode("','",$datas);
    $updatelist = "";
    foreach($datas as $key=>$value){
    $updatelist .= $key."='".$value."', ";
    }
    $updatelist = substr($updatelist,0,strlen($updatelist)-2);
    
    $result = $wpdb->get_results ("SELECT Call_Number FROM DG_Pro_Coach WHERE Call_Number = '".$Call_Number."'");
    
    if (count ($result) > 0) {
    $row = current ($result);
    $wpdb->query ("UPDATE DG_Pro_Coach SET ".$updatelist." WHERE Call_Number = '".$Call_Number."'");
    } else {
    $wpdb->query("INSERT INTO DG_Pro_Coach (".$columns.",Call_Number ) VALUES ('".$values."','$Call_Number' )");
    }
    
    ?>
    

    【讨论】:

      猜你喜欢
      • 2021-01-31
      • 1970-01-01
      • 2020-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-13
      • 1970-01-01
      相关资源
      最近更新 更多