【问题标题】:Dynamic PHP PDO MYSQL query doesn't Update [No error returned]动态 PHP PDO MYSQL 查询不更新 [未返回错误]
【发布时间】:2015-04-26 11:28:34
【问题描述】:

好的,我尝试使用 PDO MYSQL 进行更新查询,以便了解如何使其工作,然后创建一个函数以使其更有效

问题是不起作用,我做了所有日志文件允许我的调试,以及个人回报,我也修复了导航器告诉的任何地方,甚至使用 Firebug

有什么想法吗?

任何建议、问题、评论或任何类型的答案都将不胜感激

提前致谢

<?php
include('conexion.php');
session_start();


 $idf = $_POST['Id_Msg'];
 $ids = (int) $idf;

 var_dump($ids);
  echo '<br /><br />';
 var_dump($_FILES);

 echo '<br /><br />';
 var_dump($_POST);
 echo '<br /><br />';

  $wlq = -1;

 if($_POST['Title']) {
     $wlq++;
 }
 if($_POST['Prelude']) {
     $wlq++;
 }

 if($_POST['Text']) {
     $wlq++;
 }

 if($_POST['NOMBR1']) {
     $wlq++;
 }

 if($_POST['NOMBR2']) {
     $wlq++;
 }

 if($_POST['NOMBR3']) {
     $wlq++;
 }

 if($_POST['NOMBR4']) {
     $wlq++;
 }

 if($_POST['REGIN']) {
     $wlq++;
 }

 if($_POST['CTGRY']) {
     $wlq++;
 }

 if(!empty($_FILES['RutIm']['name'])) {
     $wlq++;
     echo 'me esta detectando visteh!';
 }

 echo "Asignado es: ".$wlq.'<br /><br />';

 $qls = "UPDATE `cmtmplo` SET";

 if($_POST['Title']) {
     if($wlq > 0){
    $qls .=" `Title` = :Title , ";
    $wlq--;
     } else {
    $qls .=" `Title` = :Title";
    }
 }

 if($_POST['Prelude']) {
     if($wlq > 0){
    $qls .=" `Prelude` = :Prelude , ";
    $wlq--;
     } else {
    $qls .=" `Prelude` = :Prelude";
    }
 }

 if($_POST['Text']) {
     if($wlq > 0){
    $qls .=" `Text` = :Text , ";
    $wlq--;
     } else {
    $qls .=" `Text` = :Text";
    }
 }

 if($_POST['NOMBR1']) {
     if($wlq > 0){
    $qls .=" `NOMBR1` = :NOMBR1 , ";
    $wlq--;
     } else {
    $qls .=" `NOMBR1` = :NOMBR1";
    }
 }

 if($_POST['NOMBR2']) {
     if($wlq > 0){
    $qls .=" `NOMBR2` = :NOMBR2 , ";
    $wlq--;
     } else {
    $qls .=" `NOMBR2` = :NOMBR2";
    }
 }

 if($_POST['NOMBR3']) {
     if($wlq > 0){
    $qls .=" `NOMBR3` = :NOMBR3 , ";
    $wlq--;
     } else {
    $qls .=" `NOMBR3` = :NOMBR3";
    }
 }

 if($_POST['NOMBR4']) {
     if($wlq > 0){
    $qls .=" `NOMBR4` = :NOMBR4 , ";
    $wlq--;
     } else {
    $qls .=" `NOMBR4` = :NOMBR4";
    }
 }

 if($_POST['REGIN']) {
     if($wlq > 0){
    $qls .=" `REGIN` = :REGIN , ";
    $wlq--;
     } else {
    $qls .=" `REGIN` = :REGIN";
    }
 }

 if($_POST['CTGRY']) {
     if($wlq > 0){
    $qls .=" `CTGRY` = :CTGRY , ";
    $wlq--;
     } else {
    $qls .=" `CTGRY` = :CTGRY";
    }
 }

 if(!empty($_FILES['RutIm']['name'])) {
     if($wlq > 0){
    $qls .=" `RutIm` = :RutIm , ";
    $wlq--;
     } else {

    }
 }

 $qls .= " WHERE 'Id_Msg' = :ids";
 echo $qls;
 $stmt = $con->prepare($qls);
 $stmt->bindValue(':ids', $ids);

 if(isset($_POST['Title']) && !empty($_POST['Title'])) {
    $stmt->bindValue('Title', $_POST['Title']);
 } 

 if(isset($_POST['Prelude']) && !empty($_POST['Prelude'])) {
    $stmt->bindValue('Prelude', $_POST['Prelude']);
 } 

 if(isset($_POST['Text']) && !empty($_POST['Text'])) {
    $stmt->bindValue('Text', $_POST['Text']);
 } 

 if(isset($_POST['NOMBR1']) && !empty($_POST['NOMBR1'])) {
    $stmt->bindValue('NOMBR1', $_POST['NOMBR1']);
 } 

 if(isset($_POST['NOMBR2']) && !empty($_POST['NOMBR2'])) {
    $stmt->bindValue('NOMBR2', $_POST['NOMBR2']);
 } 

 if(isset($_POST['NOMBR3']) && !empty($_POST['NOMBR3'])) {
    $stmt->bindValue('NOMBR3', $_POST['NOMBR3']);
 } 

 if(isset($_POST['NOMBR4']) && !empty($_POST['NOMBR4'])) {
    $stmt->bindValue('NOMBR4', $_POST['NOMBR4']);
 }

 if(isset($_POST['REGIN']) && !empty($_POST['REGIN'])) {
    $stmt->bindValue('REGIN', $_POST['REGIN']);
 }

 if(isset($_POST['CTGRY']) && !empty($_POST['CTGRY'])) {
    $stmt->bindValue('CTGRY', $_POST['CTGRY']);
 }

 if(!empty($_FILES['RutIm']['name'])) {
    $carpeta = "images/";
    opendir($carpeta);
    $destiny = $carpeta.$_FILES['RutIm']['name'].".jpg";
    copy($_FILES['RutIm']['tmp_name'],$destiny);
    $skr=$_FILES['RutIm']['name'];
    $stmt->bindValue('RutIm', $skr);    
 }
$stmt->execute(); 
?>

回显 $qls 输出

UPDATE cmtmplo SET Title = :Title , REGIN = :REGIN , CTGRY = :CTGRY WHERE 'Id_Msg' = :ids

【问题讨论】:

  • 那么你的echo $qls; 输出是什么?
  • 这取决于我添加文本的部分和不添加的部分,但这是当前测试返回的内容更新 cmtmplo SET Title = :Title , REGIN = :REGIN , @ 987654327@ = :CTGRY WHERE 'Id_Msg' = :ids
  • 那么请给我看看$qls的输出?
  • 在这种 PDO Mysql 的情况下如何获得输出?
  • echo $qls; 在您的 $con-&gt;prepare 之前!

标签: php mysql pdo sql-update


【解决方案1】:

PHP PDO 提供了一种很好的方法来找出查询可能出现的问题。 PDOStatement::execute() 默认只返回 true 或 false。它不会返回任何具体细节。

详细的错误信息,可以使用:

var_dump($con->errorInfo());

更多详情请参考文档页面:http://php.net/manual/en/pdo.errorinfo.php

【讨论】:

  • 另外,$dbh-&gt;setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 将启用基于异常的错误处理,如果这种事情让你大吃一惊。
  • 你能在这个代码案例中实例化它吗?我不太习惯使用这个错误处理程序,谢谢
  • @user57129 在您的代码中,您可以执行以下操作:if($stmt-&gt;execute()){ echo 'Successfully updated' } else { print_r($con-&gt;errorInfo()) }
  • 谢谢,我会添加它但返回“成功更新”但是数据库保持不变
【解决方案2】:

您需要将'Title' 等所有标签更改为':Title'

 if(isset($_POST['Title']) && !empty($_POST['Title'])) {
    $stmt->bindValue(':Title', $_POST['Title']);
 } 

....

等等……你绑定的所有参数都必须以:开头

所以现在我们可以看到你应该改变

$qls .= " WHERE 'Id_Msg' = :ids";

$qls .= " WHERE `Id_Msg` = :ids";

刻度的撇号

【讨论】:

  • 试了,没问题,还是不更新
  • 冒号不是必须的
  • @user57129 所以现在我们可以看到您应该将 $qls .= " WHERE 'Id_Msg' = :ids"; 更改为 $qls .= " WHERE `Id_Msg` = :ids"; spostrophs 到滴答声
  • 男孩,你的眼睛真棒,实际上,当我将它更改为 $qls .= " WHERE Id_Msg` = :ids";` 它就像一个魅力,谢谢你跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-25
  • 2011-05-01
  • 2012-11-28
  • 1970-01-01
  • 2017-01-23
  • 1970-01-01
  • 2015-01-29
相关资源
最近更新 更多