Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.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 如何防止MySQL使用PDO使用空字符串更新列_Php_Mysql_Sql_Pdo_Prepared Statement - Fatal编程技术网

Php 如何防止MySQL使用PDO使用空字符串更新列

Php 如何防止MySQL使用PDO使用空字符串更新列,php,mysql,sql,pdo,prepared-statement,Php,Mysql,Sql,Pdo,Prepared Statement,我有一个确切的问题 然而,唯一的变化是我将其应用于PDO,而不是传统的MySQL 关于添加IF语句以检查长度是否为0的问题,我遵循了上面的答案。但这似乎不适用于PDO,因为表中没有更新,网页输出:数组([0]=>HY093[1]=>[2]=>)1。注意:我通过bind函数使用准备好的语句 包含IF语句的PHP代码包括: <?php $pdo=new PDO("mysql:dbname=createyo_TestDatabase;host=localhost","createyo_j

我有一个确切的问题

然而,唯一的变化是我将其应用于PDO,而不是传统的MySQL

关于添加IF语句以检查长度是否为0的问题,我遵循了上面的答案。但这似乎不适用于PDO,因为表中没有更新,网页输出:
数组([0]=>HY093[1]=>[2]=>)1
。注意:我通过bind函数使用准备好的语句

包含IF语句的PHP代码包括:

    <?php
$pdo=new PDO("mysql:dbname=createyo_TestDatabase;host=localhost","createyo_james","password");

$statement=$pdo->prepare(
"UPDATE `Users` 
SET `EditIDs` = IF(LENGTH(':EditID')=0, EditIDs, ':EditID'), 
`ArticleIDs` = IF(LENGTH(':ArticleID')=0, ArticleIDs, ':ArticleID'),
`Reputation` = IF(LENGTH(':Reputation')=0, Reputation, ':Reputation'),
`VotedUpArticleIDs` = IF(LENGTH(':VotedUpArticleID')=0, VotedUpArticleIDs, ':VotedUpArticleID'),
`VotedUpEditIDs` = IF(LENGTH(':VotedUpEditID')=0, VotedUpEditIDs, ':VotedUpEditID'),
`VotedDownArticleIDs` = IF(LENGTH(':VotedDownArticleID')=0, VotedDownArticleIDs, ':VotedDownArticleID'),
`VotedDownEditIDs` = IF(LENGTH(':VotedDownEditID')=0, VotedDownEditIDs, ':VotedDownEditID'),
WHERE `UserID` = :UserID");

$statement->bindValue(':EditID', (string) trim($_GET['EditID']), PDO::PARAM_STR);
$statement->bindValue(':ArticleID', (string) trim($_GET['ArticleID']), PDO::PARAM_STR);
$statement->bindValue(':Reputation', (string) trim($_GET['Reputation']), PDO::PARAM_STR);
$statement->bindValue(':VotedUpArticleID', (string) trim($_GET['VotedUpArticleID']), PDO::PARAM_STR);
$statement->bindValue(':VotedUpEditID', (string) trim($_GET['VotedUpEditID']), PDO::PARAM_STR);
$statement->bindValue(':VotedDownArticleID', (string) trim($_GET['VotedDownArticleID']), PDO::PARAM_STR);
$statement->bindValue(':VotedDownEditID', (string) trim($_GET['VotedDownEditID']), PDO::PARAM_STR);

    $statement->bindValue(':UserID', (string) trim($_GET['UserID']), PDO::PARAM_STR);

    $statement->execute() or die(print_r($statement->errorInfo()));
$results=$statement->fetchAll(PDO::FETCH_ASSOC);
$json=json_encode($results);
print $json;
?>

拥有自己的
trim
功能,如

  function nulltrim($str)
  {
      $s = trim($str);
      if ( empty($s) ) 
            return null;
      return $s;
  }


应该可以解决它。

有自己的
修剪功能

  function nulltrim($str)
  {
      $s = trim($str);
      if ( empty($s) ) 
            return null;
      return $s;
  }


应该可以解决它。

有自己的
修剪功能

  function nulltrim($str)
  {
      $s = trim($str);
      if ( empty($s) ) 
            return null;
      return $s;
  }


应该可以解决它。

有自己的
修剪功能

  function nulltrim($str)
  {
      $s = trim($str);
      if ( empty($s) ) 
            return null;
      return $s;
  }


应该解决它。

在SQL中,不应该将
:占位符
放在引号内。这使它们成为文本字符串,因此它们不会从绑定参数中被替换

$statement=$pdo->prepare(
"UPDATE `Users` 
SET `EditIDs` = IF(LENGTH(:EditID)=0, EditIDs, :EditID), 
`ArticleIDs` = IF(LENGTH(:ArticleID)=0, ArticleIDs, :ArticleID),
`Reputation` = IF(LENGTH(:Reputation)=0, Reputation, :Reputation),
`VotedUpArticleIDs` = IF(LENGTH(:VotedUpArticleID)=0, VotedUpArticleIDs, :VotedUpArticleID),
`VotedUpEditIDs` = IF(LENGTH(:VotedUpEditID)=0, VotedUpEditIDs, :VotedUpEditID),
`VotedDownArticleIDs` = IF(LENGTH(:VotedDownArticleID)=0, VotedDownArticleIDs, :VotedDownArticleID),
`VotedDownEditIDs` = IF(LENGTH(:VotedDownEditID)=0, VotedDownEditIDs, :VotedDownEditID),
WHERE `UserID` = :UserID");
但是,也不允许在同一查询中多次使用相同的
:占位符。因此,您需要为重复的占位符指定不同的名称

$statement=$pdo->prepare(
"UPDATE `Users` 
SET `EditIDs` = IF(LENGTH(:EditID)=0, EditIDs, :EditID1), 
`ArticleIDs` = IF(LENGTH(:ArticleID)=0, ArticleIDs, :ArticleID1),
`Reputation` = IF(LENGTH(:Reputation)=0, Reputation, :Reputation1),
`VotedUpArticleIDs` = IF(LENGTH(:VotedUpArticleID)=0, VotedUpArticleIDs, :VotedUpArticleID1),
`VotedUpEditIDs` = IF(LENGTH(:VotedUpEditID)=0, VotedUpEditIDs, :VotedUpEditID1),
`VotedDownArticleIDs` = IF(LENGTH(:VotedDownArticleID)=0, VotedDownArticleIDs, :VotedDownArticleID1),
`VotedDownEditIDs` = IF(LENGTH(:VotedDownEditID)=0, VotedDownEditIDs, :VotedDownEditID1)
WHERE `UserID` = :UserID");
然后必须绑定所有其他参数:

$statement->bindValue(':EditID1', (string) trim($_GET['EditID']), PDO::PARAM_STR);
$statement->bindValue(':ArticleID1', (string) trim($_GET['ArticleID']), PDO::PARAM_STR);
$statement->bindValue(':Reputation', (string) trim($_GET['Reputation']), PDO::PARAM_STR);
$statement->bindValue(':VotedUpArticleID1', (string) trim($_GET['VotedUpArticleID']), PDO::PARAM_STR);
$statement->bindValue(':VotedUpEditID1', (string) trim($_GET['VotedUpEditID']), PDO::PARAM_STR);
$statement->bindValue(':VotedDownArticleID1', (string) trim($_GET['VotedDownArticleID']), PDO::PARAM_STR);
$statement->bindValue(':VotedDownEditID1', (string) trim($_GET['VotedDownEditID']), PDO::PARAM_STR);

在SQL中,不应将
:占位符
放在引号内。这使它们成为文本字符串,因此它们不会从绑定参数中被替换

$statement=$pdo->prepare(
"UPDATE `Users` 
SET `EditIDs` = IF(LENGTH(:EditID)=0, EditIDs, :EditID), 
`ArticleIDs` = IF(LENGTH(:ArticleID)=0, ArticleIDs, :ArticleID),
`Reputation` = IF(LENGTH(:Reputation)=0, Reputation, :Reputation),
`VotedUpArticleIDs` = IF(LENGTH(:VotedUpArticleID)=0, VotedUpArticleIDs, :VotedUpArticleID),
`VotedUpEditIDs` = IF(LENGTH(:VotedUpEditID)=0, VotedUpEditIDs, :VotedUpEditID),
`VotedDownArticleIDs` = IF(LENGTH(:VotedDownArticleID)=0, VotedDownArticleIDs, :VotedDownArticleID),
`VotedDownEditIDs` = IF(LENGTH(:VotedDownEditID)=0, VotedDownEditIDs, :VotedDownEditID),
WHERE `UserID` = :UserID");
但是,也不允许在同一查询中多次使用相同的
:占位符。因此,您需要为重复的占位符指定不同的名称

$statement=$pdo->prepare(
"UPDATE `Users` 
SET `EditIDs` = IF(LENGTH(:EditID)=0, EditIDs, :EditID1), 
`ArticleIDs` = IF(LENGTH(:ArticleID)=0, ArticleIDs, :ArticleID1),
`Reputation` = IF(LENGTH(:Reputation)=0, Reputation, :Reputation1),
`VotedUpArticleIDs` = IF(LENGTH(:VotedUpArticleID)=0, VotedUpArticleIDs, :VotedUpArticleID1),
`VotedUpEditIDs` = IF(LENGTH(:VotedUpEditID)=0, VotedUpEditIDs, :VotedUpEditID1),
`VotedDownArticleIDs` = IF(LENGTH(:VotedDownArticleID)=0, VotedDownArticleIDs, :VotedDownArticleID1),
`VotedDownEditIDs` = IF(LENGTH(:VotedDownEditID)=0, VotedDownEditIDs, :VotedDownEditID1)
WHERE `UserID` = :UserID");
然后必须绑定所有其他参数:

$statement->bindValue(':EditID1', (string) trim($_GET['EditID']), PDO::PARAM_STR);
$statement->bindValue(':ArticleID1', (string) trim($_GET['ArticleID']), PDO::PARAM_STR);
$statement->bindValue(':Reputation', (string) trim($_GET['Reputation']), PDO::PARAM_STR);
$statement->bindValue(':VotedUpArticleID1', (string) trim($_GET['VotedUpArticleID']), PDO::PARAM_STR);
$statement->bindValue(':VotedUpEditID1', (string) trim($_GET['VotedUpEditID']), PDO::PARAM_STR);
$statement->bindValue(':VotedDownArticleID1', (string) trim($_GET['VotedDownArticleID']), PDO::PARAM_STR);
$statement->bindValue(':VotedDownEditID1', (string) trim($_GET['VotedDownEditID']), PDO::PARAM_STR);

在SQL中,不应将
:占位符
放在引号内。这使它们成为文本字符串,因此它们不会从绑定参数中被替换

$statement=$pdo->prepare(
"UPDATE `Users` 
SET `EditIDs` = IF(LENGTH(:EditID)=0, EditIDs, :EditID), 
`ArticleIDs` = IF(LENGTH(:ArticleID)=0, ArticleIDs, :ArticleID),
`Reputation` = IF(LENGTH(:Reputation)=0, Reputation, :Reputation),
`VotedUpArticleIDs` = IF(LENGTH(:VotedUpArticleID)=0, VotedUpArticleIDs, :VotedUpArticleID),
`VotedUpEditIDs` = IF(LENGTH(:VotedUpEditID)=0, VotedUpEditIDs, :VotedUpEditID),
`VotedDownArticleIDs` = IF(LENGTH(:VotedDownArticleID)=0, VotedDownArticleIDs, :VotedDownArticleID),
`VotedDownEditIDs` = IF(LENGTH(:VotedDownEditID)=0, VotedDownEditIDs, :VotedDownEditID),
WHERE `UserID` = :UserID");
但是,也不允许在同一查询中多次使用相同的
:占位符。因此,您需要为重复的占位符指定不同的名称

$statement=$pdo->prepare(
"UPDATE `Users` 
SET `EditIDs` = IF(LENGTH(:EditID)=0, EditIDs, :EditID1), 
`ArticleIDs` = IF(LENGTH(:ArticleID)=0, ArticleIDs, :ArticleID1),
`Reputation` = IF(LENGTH(:Reputation)=0, Reputation, :Reputation1),
`VotedUpArticleIDs` = IF(LENGTH(:VotedUpArticleID)=0, VotedUpArticleIDs, :VotedUpArticleID1),
`VotedUpEditIDs` = IF(LENGTH(:VotedUpEditID)=0, VotedUpEditIDs, :VotedUpEditID1),
`VotedDownArticleIDs` = IF(LENGTH(:VotedDownArticleID)=0, VotedDownArticleIDs, :VotedDownArticleID1),
`VotedDownEditIDs` = IF(LENGTH(:VotedDownEditID)=0, VotedDownEditIDs, :VotedDownEditID1)
WHERE `UserID` = :UserID");
然后必须绑定所有其他参数:

$statement->bindValue(':EditID1', (string) trim($_GET['EditID']), PDO::PARAM_STR);
$statement->bindValue(':ArticleID1', (string) trim($_GET['ArticleID']), PDO::PARAM_STR);
$statement->bindValue(':Reputation', (string) trim($_GET['Reputation']), PDO::PARAM_STR);
$statement->bindValue(':VotedUpArticleID1', (string) trim($_GET['VotedUpArticleID']), PDO::PARAM_STR);
$statement->bindValue(':VotedUpEditID1', (string) trim($_GET['VotedUpEditID']), PDO::PARAM_STR);
$statement->bindValue(':VotedDownArticleID1', (string) trim($_GET['VotedDownArticleID']), PDO::PARAM_STR);
$statement->bindValue(':VotedDownEditID1', (string) trim($_GET['VotedDownEditID']), PDO::PARAM_STR);

在SQL中,不应将
:占位符
放在引号内。这使它们成为文本字符串,因此它们不会从绑定参数中被替换

$statement=$pdo->prepare(
"UPDATE `Users` 
SET `EditIDs` = IF(LENGTH(:EditID)=0, EditIDs, :EditID), 
`ArticleIDs` = IF(LENGTH(:ArticleID)=0, ArticleIDs, :ArticleID),
`Reputation` = IF(LENGTH(:Reputation)=0, Reputation, :Reputation),
`VotedUpArticleIDs` = IF(LENGTH(:VotedUpArticleID)=0, VotedUpArticleIDs, :VotedUpArticleID),
`VotedUpEditIDs` = IF(LENGTH(:VotedUpEditID)=0, VotedUpEditIDs, :VotedUpEditID),
`VotedDownArticleIDs` = IF(LENGTH(:VotedDownArticleID)=0, VotedDownArticleIDs, :VotedDownArticleID),
`VotedDownEditIDs` = IF(LENGTH(:VotedDownEditID)=0, VotedDownEditIDs, :VotedDownEditID),
WHERE `UserID` = :UserID");
但是,也不允许在同一查询中多次使用相同的
:占位符。因此,您需要为重复的占位符指定不同的名称

$statement=$pdo->prepare(
"UPDATE `Users` 
SET `EditIDs` = IF(LENGTH(:EditID)=0, EditIDs, :EditID1), 
`ArticleIDs` = IF(LENGTH(:ArticleID)=0, ArticleIDs, :ArticleID1),
`Reputation` = IF(LENGTH(:Reputation)=0, Reputation, :Reputation1),
`VotedUpArticleIDs` = IF(LENGTH(:VotedUpArticleID)=0, VotedUpArticleIDs, :VotedUpArticleID1),
`VotedUpEditIDs` = IF(LENGTH(:VotedUpEditID)=0, VotedUpEditIDs, :VotedUpEditID1),
`VotedDownArticleIDs` = IF(LENGTH(:VotedDownArticleID)=0, VotedDownArticleIDs, :VotedDownArticleID1),
`VotedDownEditIDs` = IF(LENGTH(:VotedDownEditID)=0, VotedDownEditIDs, :VotedDownEditID1)
WHERE `UserID` = :UserID");
然后必须绑定所有其他参数:

$statement->bindValue(':EditID1', (string) trim($_GET['EditID']), PDO::PARAM_STR);
$statement->bindValue(':ArticleID1', (string) trim($_GET['ArticleID']), PDO::PARAM_STR);
$statement->bindValue(':Reputation', (string) trim($_GET['Reputation']), PDO::PARAM_STR);
$statement->bindValue(':VotedUpArticleID1', (string) trim($_GET['VotedUpArticleID']), PDO::PARAM_STR);
$statement->bindValue(':VotedUpEditID1', (string) trim($_GET['VotedUpEditID']), PDO::PARAM_STR);
$statement->bindValue(':VotedDownArticleID1', (string) trim($_GET['VotedDownArticleID']), PDO::PARAM_STR);
$statement->bindValue(':VotedDownEditID1', (string) trim($_GET['VotedDownEditID']), PDO::PARAM_STR);


可能的重复项在
WHERE
子句前面有一个逗号。可能的重复项在
WHERE
子句前面有一个逗号。可能的重复项在
WHERE
子句前面有一个逗号。可能的重复项在
WHERE
谢谢你的意见。这是否意味着我使用的IF语句不适用于PDO,或者这只是一种您觉得更合适的方法?您正在用它的当前值更新列。如果这已经是一个空字符串,那么它将保留下来,显然不会转换为
null
。感谢您的输入。这是否意味着我使用的IF语句不适用于PDO,或者这只是一种您觉得更合适的方法?您正在用它的当前值更新列。如果这已经是一个空字符串,那么它将保留下来,显然不会转换为
null
。感谢您的输入。这是否意味着我使用的IF语句不适用于PDO,或者这只是一种您觉得更合适的方法?您正在用它的当前值更新列。如果这已经是一个空字符串,那么它将保留下来,显然不会转换为
null
。感谢您的输入。这是否意味着我使用的IF语句不适用于PDO,或者这只是一种您觉得更合适的方法?您正在用它的当前值更新列。如果这已经是一个空字符串,那么它将保留并且不会转换为
null
。显然,这就是我要找的。但是,我现在收到查询WHERE部分的语法错误。我已经更新了这个问题。在
votedDownEditId
行的末尾有一个额外的逗号。谢谢:)我真的应该使用一个合适的PHP IDE,而不是web主机给我的。谢谢,这似乎就是我要找的。但是,我现在收到查询WHERE部分的语法错误。我已经更新了这个问题。在
votedDownEditId
行的末尾有一个额外的逗号。谢谢:)我真的应该使用一个合适的PHP IDE,而不是web主机给我的。谢谢,这似乎就是我要找的。但是,我现在收到查询WHERE部分的语法错误。我已经更新了这个问题。在
votedDownEditId
行的末尾有一个额外的逗号。谢谢:)我真的应该使用一个合适的PHP IDE,而不是web主机给我的。谢谢,这似乎就是我要找的。但是,我现在收到查询WHERE部分的语法错误。我已经更新了这个问题。在
VotedDownEditIDs
行的末尾有一个额外的逗号。谢谢:)我真的应该使用一个合适的PHP IDE,而不是web主机给我的。