Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/251.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 PDO删除查询不起作用_Php_Mysql_Pdo - Fatal编程技术网

Php PDO删除查询不起作用

Php PDO删除查询不起作用,php,mysql,pdo,Php,Mysql,Pdo,我有一个不想工作的代码,我不明白为什么 $DeleteT=$con->prepare("DELETE Examples FROM USERS WHERE Email=:Email AND Pass=:Pass"); $DeleteT->bindParam(':Pass', $Pass); $DeleteT->bindParam(':Email', $Email); $DeleteT->execute(array( ':Email' => $Email,

我有一个不想工作的代码,我不明白为什么

$DeleteT=$con->prepare("DELETE Examples FROM USERS WHERE Email=:Email AND Pass=:Pass");
$DeleteT->bindParam(':Pass', $Pass);
$DeleteT->bindParam(':Email', $Email);
$DeleteT->execute(array(
      ':Email' => $Email,
      ':Pass' => $Pass,
));

我已经尝试过搜索delete查询的示例,但我仍然不明白为什么,我的值不希望从数据库中删除,我还检查了表名和数据库名是否匹配,它们是否匹配。

您绑定了错误的变量,需要绑定$delete而不是$DeleteT

这就是你需要的

$DeleteT=$con->prepare("DELETE Examples FROM USERS WHERE Email=:Email AND Pass=:Pass")->execute(array(':Email' => $Email,':Pass' => $Pass));
注:注意额外的,关于“:Pass”=>$Pass,;移除它。也不要将密码存储在纯文本中,请使用密码散列和密码验证


您绑定的变量错误,需要绑定的是$Delete而不是$DeleteT

这就是你需要的

$DeleteT=$con->prepare("DELETE Examples FROM USERS WHERE Email=:Email AND Pass=:Pass")->execute(array(':Email' => $Email,':Pass' => $Pass));
注:注意额外的,关于“:Pass”=>$Pass,;移除它。也不要将密码存储在纯文本中,请使用密码散列和密码验证


您当前绑定变量两次—一次通过bindParam,然后再次作为要执行的参数。您需要通过bindParam或execute绑定变量一次,但不能同时绑定两者

此外,用于删除的语法是DELETE FROM…,而不是DELETE column FROM

所以要么像这样,通过execute绑定它们

或者,如果要使用bindParam

两者都可以,选择你最喜欢的。PDOStatement::bindParam有其他选项,如果您需要,下面的链接中会有关于它的其他信息,但是为了绑定两个字符串,任何一种方法都是适用的

更新: 根据评论,您只希望清空Examples列。这意味着您要更新该行,而不是删除它。下面的示例将示例列设置为空字符串(假设它是text或varchar列),并接受字符串。如果希望将其设置为NULL或其他值,请将其修改为NULL或其他值

$DeleteT = $con->prepare("UPDATE USERS SET Examples=:example WHERE Email=:Email AND Pass=:Pass");
$DeleteT->execute(array(
  ':example' => '', 
  ':Email' => $Email,
  ':Pass' => $Pass
));
安全说明: 你永远不应该以纯文本的形式存储密码,或者使用糟糕的散列方法,比如md5、sha1等。这根本不安全!PHP有内置的函数,您应该使用这些函数来处理密码的存储,请参阅更安全的函数


您当前绑定变量两次—一次通过bindParam,然后再次作为要执行的参数。您需要通过bindParam或execute绑定变量一次,但不能同时绑定两者

此外,用于删除的语法是DELETE FROM…,而不是DELETE column FROM

所以要么像这样,通过execute绑定它们

或者,如果要使用bindParam

两者都可以,选择你最喜欢的。PDOStatement::bindParam有其他选项,如果您需要,下面的链接中会有关于它的其他信息,但是为了绑定两个字符串,任何一种方法都是适用的

更新: 根据评论,您只希望清空Examples列。这意味着您要更新该行,而不是删除它。下面的示例将示例列设置为空字符串(假设它是text或varchar列),并接受字符串。如果希望将其设置为NULL或其他值,请将其修改为NULL或其他值

$DeleteT = $con->prepare("UPDATE USERS SET Examples=:example WHERE Email=:Email AND Pass=:Pass");
$DeleteT->execute(array(
  ':example' => '', 
  ':Email' => $Email,
  ':Pass' => $Pass
));
安全说明: 你永远不应该以纯文本的形式存储密码,或者使用糟糕的散列方法,比如md5、sha1等。这根本不安全!PHP有内置的函数,您应该使用这些函数来处理密码的存储,请参阅更安全的函数


您的删除语法不标准,应该是从tableName中删除


您的删除语法不标准,应该是从tableName中删除


永远不要存储纯文本密码!请使用PHP来处理密码安全性。如果您使用的PHP版本低于5.5,则可以使用密码\u散列。在散列之前,不需要对它们执行任何操作或使用任何其他清理机制。这样做会更改密码并导致不必要的额外编码。您先绑定,然后再次使用相同的参数执行?您可以绑定参数或执行数组,而不是同时执行两者。切勿存储纯文本密码!请使用PHP来处理密码安全性。如果您使用的PHP版本低于5.5,则可以使用密码\u散列。在散列之前,不需要对它们执行任何操作或使用任何其他清理机制。这样做会更改密码并导致不必要的额外编码。您先绑定,然后再使用相同的参数执行?您可以绑定参数或执行数组,但不能同时执行两者。很抱歉,我键入的代码错误,但仍然无法工作。不管怎样,我都希望你能回答!然后编写正确的代码,否则我们不会发现问题@A.RossiSorry我输入了错误的代码,但仍然不起作用。不管怎样,我都希望你能回答!然后编写正确的代码,否则我们将无法解决这个问题@A.RossiI删除bindParam,但它仍然不起作用,无论如何,谢谢你,谢谢你的时间!然后你需要弄清楚
有任何错误来自MySQL。通过添加$con->setAttributePDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION,设置PDO在发生错误时抛出异常;在创建PDO连接之后。然后检查您的日志或启用错误报告(如果您还没有)。@A.Rossi查询中还存在语法错误,请参阅我的更新答案。但是,我只想删除示例、列,我该怎么做?删除该列是什么意思?您想将其设置为NULL、设置为空字符串还是什么?删除删除了整行。我删除了bindParam,但它仍然不起作用,无论如何,谢谢你,谢谢你的时间!然后,您需要确定MySQL是否存在任何错误。通过添加$con->setAttributePDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION,设置PDO在发生错误时抛出异常;在创建PDO连接之后。然后检查您的日志或启用错误报告(如果您还没有)。@A.Rossi查询中还存在语法错误,请参阅我的更新答案。但是,我只想删除示例、列,我该怎么做?删除该列是什么意思?您想将其设置为NULL、设置为空字符串还是什么?删除将删除整行。
    $DeleteT=$con->prepare("DELETE FROM USERS WHERE Email=:Email AND Pass=:Pass");
    $DeleteT->execute(array(
      ':Email' => $Email,
      ':Pass' => $Pass
    ));