Php 如何防止MySQL使用PDO使用空字符串更新列
我有一个确切的问题 然而,唯一的变化是我将其应用于PDO,而不是传统的MySQL 关于添加IF语句以检查长度是否为0的问题,我遵循了上面的答案。但这似乎不适用于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
数组([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主机给我的。