使用PDO将textarea $ _POST导入MySQL

时间:2015-02-28 02:56:03

标签: php mysql post pdo textarea

我正在尝试将一个textarea值发布到一个mysql表中......以及其他一些字段&数据类型,使用PHP的PDO。当我从插入或更新中删除textarea字段('desc')时,所有其他字段都适当插入。当我在准备好的语句中包含textarea('desc')时...查询失败。我已经为表中的'desc'字段尝试了几种不同的数据类型,包括text,bigtext,smalltext,varchar。所以我回过头来看看字段的类型以及我是否必须逃避内容或其他任何内容......但是在使用PDO时我已经阅读过了。

$ItemID = $_POST['ItemID'];
$Name = $_POST['Name'];
$Desc = $_POST['Desc'];
$ItemValue = $_POST['ItemValue'];
$GiveawayDate = date('y-m-d 17:00:00',strtotime($_POST['GiveawayDate']));
$NewItemData = array('name'=>$Name, 'desc'=>$Desc, 'itemvalue'=>$ItemValue, 'giveawaydate'=>$GiveawayDate, 'creator'=>$_SESSION['userid'], 'itemid'=>$ItemID);

$ReturnData['Fail']=0;

try {
    $DBH = new PDO("mysql:host=$hostname;dbname=$db_name", $db_username, $db_password);
    $STH = $DBH->prepare("UPDATE giveawayitem SET name=:name, desc=:desc, itemvalue=:itemvalue, giveawaydate=:giveawaydate, creator=:creator WHERE iditem=:itemid");
    $STH->execute($NewItemData);
    if($STH->rowCount()==0){
        $ReturnData['Fail']=1;
        $ReturnData['Error']='Update Failure';
        $ReturnData['Status']='Item Creation Error. 0 rows affect.';
    }else{
        $ReturnData['Status']='Item Updated :)';
    }
}
catch(PDOException $e) {
    $ReturnData['Fail']=1;
    $ReturnData['Error']=$e->getMessage();
}       
$DBH = null;

die(json_encode($ReturnData));

通过JSON返回的数组背后的逻辑是,这是通过AJAX执行的。

每个POST都会通过。

PDOException $ e-> getMessage()不返回任何内容......我只是得到一个0的rowCount。

2 个答案:

答案 0 :(得分:1)

这可能不是,但在您的查询中,您的where子句为WHERE iditem=:itemid,您的意思是WHERE itemid=:itemid吗?

答案 1 :(得分:1)

您正在使用desc作为您的列,是一个MySQL保留字,而不会使用刻度线转义它。

将其重命名为" description",或将其换成刻度:

UPDATE giveawayitem SET name=:name, `desc`=:desc ...

如果您使用setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION),则会发出语法错误信号,例如:

  

您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以便在' desc

附近使用正确的语法
  • 在打开连接后立即添加$DBH->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

另见:


error reporting添加到文件的顶部,这有助于查找错误。

<?php 
error_reporting(E_ALL);
ini_set('display_errors', 1);

// rest of your code

旁注:错误报告应仅在暂存时完成,而不是生产。