Php 如何解决这个问题;逗号问题;以优雅的方式?
这是一个我用不同的方法解决了很多次的问题,但从来没有一个完美的解决方案 我有一个要生成的SQL字符串: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 = "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);
这被称为“篱笆柱”问题,仅供参考。这被称为“篱笆柱”问题,仅供参考。我想得到一些关于否决票的反馈。我应该改进什么?我想得到一些关于否决票的反馈。我应该改进什么?