您好我尝试使用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行
迈克尔编辑
答案 0 :(得分:3)
由于projetstaches
中没有引用UPDATE
中的任何列,并且可以通过排序timUserId
来确定每个timesheet
的最新记录,{{1是不必要的,实际上所有其他表都是不必要的。使用JOIN
和ORDER BY
,您可以定位特定记录。
按LIMIT
和timCreateDate 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)