Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何解决这个问题;逗号问题;以优雅的方式?_Php_Sql - Fatal编程技术网

Php 如何解决这个问题;逗号问题;以优雅的方式?

Php 如何解决这个问题;逗号问题;以优雅的方式?,php,sql,Php,Sql,这是一个我用不同的方法解决了很多次的问题,但从来没有一个完美的解决方案 我有一个要生成的SQL字符串: $sql = "UPDATE table"; $sql .= "SET"; $sql .= "sqlTableName = 'Y', column2 = value2"; 现在,基于 isset($_GET['value1']) isset($_GET['value2']) 我想补充: $sql .= "sqlTableName = 'Y'," 基于 isset($_GET[

这是一个我用不同的方法解决了很多次的问题,但从来没有一个完美的解决方案

我有一个要生成的SQL字符串:

$sql = "UPDATE table";
$sql .= "SET"; 
$sql .= "sqlTableName = 'Y', column2 = value2";
现在,基于

isset($_GET['value1'])
isset($_GET['value2'])    
我想补充:

$sql .= "sqlTableName = 'Y',"
基于

isset($_GET['value1'])
isset($_GET['value2'])    
我想:

$sql .= "sqlTableName2 = 'Y',"
待补充

如果我把逗号放在字符串之前或之后,我就会遇到麻烦


现在我知道如何解决这个问题,但如何优雅地解决这个问题?

将值放入数组,然后使用数组联接方法。具体语法取决于您使用的编程语言

您选择的标记对确定这是什么毫无帮助,但看起来您正在使用PHP

<?php
    $values = [ $_GET['value1'], $_GET['value2'] ];
    print join(", ", $values);

将值放入数组中,然后使用数组联接方法。具体语法取决于您使用的编程语言

您选择的标记对确定这是什么毫无帮助,但看起来您正在使用PHP

<?php
    $values = [ $_GET['value1'], $_GET['value2'] ];
    print join(", ", $values);

您可以构建一个包含所有要更新字段的数组,然后将它们一起内爆

$sql = "UPDATE table SET "; 

$setArray = [];
if(isset($_GET['value1'])){
    $setArray[] = "sqlTableName = 'Y'";
}
if(isset($_GET['value2'])){
    $setArray[] = "sqlTableName2 = 'Y'";
}

echo $sql.implode(', ', $setArray);
当您有硬编码的值时,这非常简单。用户输入变得更加困难,必须参数化。您需要在单独的表中收集这些值

下面是一个示例,说明如何使用PDO实现这一点

$setFields = [];
$setValues = [];
if (isset($_GET['value1'])) {
    $setFields[] = "sqlTableName = ?";
    $setValues[] = $_GET['value1'];
}
if (isset($_GET['value2'])) {
    $setFields[] = "sqlTableName2 = 'Y'";
    $setValues[] = $_GET['value2'];
}

$pdo = new PDO($dsn, $user, $pass, [
    \PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION,
    \PDO::ATTR_EMULATE_PREPARES => false
]);

$pdo->prepare("UPDATE table SET ".implode(', ', $setFields))->execute($setValues);

您可以构建一个包含所有要更新的字段的数组,然后将它们一起内爆

$sql = "UPDATE table SET "; 

$setArray = [];
if(isset($_GET['value1'])){
    $setArray[] = "sqlTableName = 'Y'";
}
if(isset($_GET['value2'])){
    $setArray[] = "sqlTableName2 = 'Y'";
}

echo $sql.implode(', ', $setArray);
当您有硬编码的值时,这非常简单。用户输入变得更加困难,必须参数化。您需要在单独的表中收集这些值

下面是一个示例,说明如何使用PDO实现这一点

$setFields = [];
$setValues = [];
if (isset($_GET['value1'])) {
    $setFields[] = "sqlTableName = ?";
    $setValues[] = $_GET['value1'];
}
if (isset($_GET['value2'])) {
    $setFields[] = "sqlTableName2 = 'Y'";
    $setValues[] = $_GET['value2'];
}

$pdo = new PDO($dsn, $user, $pass, [
    \PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION,
    \PDO::ATTR_EMULATE_PREPARES => false
]);

$pdo->prepare("UPDATE table SET ".implode(', ', $setFields))->execute($setValues);

这被称为“篱笆柱”问题,仅供参考。这被称为“篱笆柱”问题,仅供参考。我想得到一些关于否决票的反馈。我应该改进什么?我想得到一些关于否决票的反馈。我应该改进什么?