我的数据不会更新php-sql

时间:2014-05-12 16:59:14

标签: php sql database select sql-update

您好我尝试使用php更新我的sql中的数据。

首先我连接到我的数据库

try
{
$bdd = new PDO('mysql:host=localhost;dbname=cruel', 'root', '');
}
catch (Exception $e)
{
die('Erreur : ' . $e->getMessage());
}

从我的其他页面拿走var后,我检查是否为空

 if (isSet($_POST['radio']) ) 
    {

        $timVerified = ($_POST['radio']) ;
        echo($_POST['radio']);
    }else{
        echo('Aucun changement à été effectué. ');

    }

我请求选择我需要的所有数据

$requete = $bdd->prepare('SELECT timVerified,usrId, timChoice,prtTimeSheetId,timId,timUserId  FROM projetstaches ,users,timesheets   ');
$requete->execute() or die(print_r($requete->errorInfo()));
$resultat = $requete->fetch();

这就是问题,它不会在这里更新

$req = $bdd->prepare('UPDATE timesheets (timVerified) SET timVerified = :timVerified SELECT MAX(prtTimeSheetId) FROM projetstaches WHERE usrId = 7 AND timId = prtTimeSheetId AND timUserId = usrID' ); 
 $req->execute(array(
      ':timVerified' => $timVerified
     ));

有人可以帮助我吗? (我使用wampserver,notepadd ++用于软件)

编辑对于fred错误

  

致命错误:未捕获的异常' PDOException' with message' SQLSTATE [42000]:语法错误或访问冲突:1064 SQL语法中有错误;检查与您的MySQL服务器版本相对应的手册,以便使用接近' SELECT MAX(prtTimeSheetId)FROM projetstaches WHERE usrId = 7 AND timId = prtTim'在第1行'在第38行的C:\ wamp \ www \ testlp \ completecheck.php

  

(!)PDOException:SQLSTATE [42000]:语法错误或访问冲突:1064 SQL语法中有错误;检查与您的MySQL服务器版本相对应的手册,以便使用接近' SELECT MAX(prtTimeSheetId)FROM projetstaches WHERE usrId = 7 AND timId = prtTim'在第38行的C:\ wamp \ www \ testlp \ completecheck.php第1行

迈克尔编辑

http://pastebin.com/6LBwGtc3

2 个答案:

答案 0 :(得分:3)

由于projetstaches中没有引用UPDATE中的任何列,并且可以通过排序timUserId来确定每个timesheet的最新记录,{{1是不必要的,实际上所有其他表都是不必要的。使用JOINORDER BY,您可以定位特定记录。

LIMITtimCreateDate DESC排序,以查看两个共享相同日期的情况,因为它是timId列而不是DATE

DATETIME

参考MySQL UPDATE syntax reference

上面打印的查询可以通过UPDATE timesheets SET timVerified = :timVerified WHERE timUserId = 7 ORDER BY timCreatedDate DESC, timId DESC # Crucially, LIMIT 1 to target one record only (the first in the sort) LIMIT 1 调用直接放入PDO代码中,并且已经定义了它的数组参数。

注意:我建议将execute()timCreatedDate类型更改为DATE,以便您可以更精确地定位它。如果您这样做,则可能不需要在DATETIME中使用timId DESC

答案 1 :(得分:1)

更改从

更新MySQL的行
$req = $bdd->prepare('UPDATE timesheets (timVerified) SET timVerified = :timVerified SELECT MAX(prtTimeSheetId) FROM projetstaches WHERE usrId = 7 AND timId = prtTimeSheetId AND timUserId = usrID' ); 

$req = $bdd->prepare('UPDATE timesheets SET timVerified = :timVerified SELECT MAX(prtTimeSheetId) FROM projetstaches WHERE usrId = 7 AND timId = prtTimeSheetId AND timUserId = usrID' ); 

即。删除(timVerified)