php - 使用 PDO 将文本区域 $_POST 发送到 MySQL

标签 php mysql post pdo textarea

我正在尝试使用 PHP 的 PDO 将文本区域值与其他一些字段和数据类型一起发布到 mysql 表中。当我从插入或更新中删除文本区域字段(“desc”)时,所有其他字段都会正确插入。当我在准备好的语句中包含文本区域(“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 执行的。

每个帖子都成功通过。

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

最佳答案

您在列中使用 desc,它是 MySQL 保留字,无需使用刻度进行转义。

要么将其重命名为“描述”之类的其他名称,要么将其包裹在勾号中:

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

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

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '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

旁注:错误报告只能在暂存阶段完成,而不能在生产阶段完成。

关于php - 使用 PDO 将文本区域 $_POST 发送到 MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28777601/

相关文章:

php - 如何在 php 中保存 $_SESSION 中的值并检索

java - 如何将java程序直接自动连接到MySQL数据库?

php - fsockopen 无法连接 SSL (HTTPS) url。使用 Gallery 3 上传图片时

php - Mysql 未在 xampp 中运行

php - 日期字段的行未显示在 Grocery 表中

java - Volley post 方法 JSONArray

node.js - 使用 Promisify(https) 的 POST 语法

python - pycurl请求中的表单数据

javascript - 如何用 PHP 制作一个机器人来登录网站并在网站上做事

php - 将字符串转换为 INT 返回 0