2014-10-19 231 views
1

这是查询代码:PHP MySQL查询不工作

if (isset($_POST['moduleAction']) && ($_POST['moduleAction'] == 'edit')) { 

      $date = date('Y-m-d H:i:s', time());     
      $stmt = $db->prepare('UPDATE todolist SET what = ?, priority = ?, added_on = ? WHERE id = ?'); 
      $stmt->execute(array($what, $priority + 1, $date, $id)); 

    } 

我的数据库连接:

<?php 

    try { 
     $db = new PDO('mysql:host=' . DB_HOST .';dbname=' . DB_NAME . ';charset=utf8mb4', DB_USER, DB_PASS); 
     $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
     $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 

    } catch (Exception $e) { 
     showDbError('connect', $e->getMessage()); 
    } 

在同一文件中的数据库不执行查询,另一页上我正在执行查询到相同的数据库没有问题。我试着在没有准备好的语句的情况下执行它,双引号,重新启动te连接,......没有任何作用。

任何人都可以把我推向正确的方向吗?

编辑

设置变量:

$priorities = array('low','normal','high'); // The possible priorities of a todo 
    $formErrors = array(); // The encountered form errors 

    $id = isset($_GET['id']) ? (int) $_GET['id'] : 0; // The passed in id of the todo 

    $what = isset($_POST['what']) ? $_POST['what'] : ''; // The todo that was sent in via the form 
    $priority = isset($_POST['priority']) ? $_POST['priority'] : 'low'; // The priority that was sent in via the form 
+1

在你的提取中,你不会设置'$ what','$ priority'或'$ id'。这些变量在哪里设置? – bcmcfc 2014-10-19 17:10:19

+0

我编辑了我的文章。 – user3165926 2014-10-19 17:13:16

回答

0

如果您的查询不执行,你没有错误,我会说,什么是错与此

if(isset($_POST['moduleAction']) && ($_POST['moduleAction'] == 'edit')) { 

确保你的moduleAction被设置在你的post数组中,并且实际上是'编辑'的例子。

希望这有助于

+0

if语句没有问题,当我在里面放置回声时,php echo就是这样。 – user3165926 2014-10-19 17:21:36

0

您应经常检查错误,有这么多的原因查询无法按照预期工作。

这里是检查的正确方法:

if(isset($_POST['moduleAction']) && ($_POST['moduleAction'] == 'edit')) { 
    $date = date('Y-m-d H:i:s', time()); 
    $query ='UPDATE todolist SET what = ?, priority = ?, added_on = ? WHERE id = ?'; 
    if($stmt = $db->prepare($query)){ 
     if($stmt->execute(array($what, $priority + 1, $date, $id))){ 
      echo 'execute() successful'; 
      if($stmt->rowCount() > 0){ 
       echo 'Affected a row'; 
      }else{ 
       echo 'No row affected'; 
      } 
     }else{ 
      echo 'execute() error:'; 
      die($dbh->errorInfo()); 
     } 
    }else{ 
     echo 'prepare() error:'; 
     die($dbh->errorInfo()); 
    } 
} 

编辑

一两件事,$priority + 1似乎有点怪异。

您的更新后,我看到这一行:

$priority = isset($_POST['priority']) ? $_POST['priority'] : 'low'; 

所以你尝试通过1递增一个字符串?

无论如何,传统的调试发生了什么?

$sql_debug = "UPDATE todolist 
       SET what = '$what', priority = '$priority', added_on = '$date' 
       WHERE id = $id"; 

echo "**************************************<br>"; 
echo $sql_debug."<br>"; 
echo "**************************************<br>"; 

error_log('sql = '.$sql_debug); 

看看查询

和运行看个究竟

+0

执行上面的代码时,php echo's:execute()successfulNo row affected – user3165926 2014-10-19 17:20:41

+0

然后这告诉你它不是代码相关的,请参阅更新 – meda 2014-10-19 17:22:33

+1

这意味着你的数据库中没有与你想更新的id相匹配的todolist。 – holygrinder 2014-10-19 17:26:03

0

我想更新查询是正确的,请检查日期时间格式,试试这个代码

if (isset($_POST['moduleAction']) && ($_POST['moduleAction'] == 'edit')) { 

      $date=date_create("2014-10-09"); 
      date_time_set($date,13,24,46);   
      $datetime =date_format($date,"Y-m-d H:i:s");     
      $stmt = $db->prepare('UPDATE todolist SET what = ?, priority = ?, added_on = ? WHERE id = ?'); 
      $stmt->execute(array($what, $priority + 1, $datetime, $id)); 

    }