textarea $_POST 到 MySQL 与 PDO
textarea $_POST into MySQL with PDO
我正在尝试 post 将文本区域值 mysql table... 与其他一些字段和数据类型一起使用 PHP 的 PDO .当我从插入或更新中删除 textarea 字段 ('desc') 时,所有其他字段都会正确插入。当我在准备好的语句中包含 textarea ('desc') 时...查询失败。我为 table 中的 'desc' 字段尝试了几种不同的数据类型,包括文本、大文本、小文本、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 数组 return 背后的逻辑是,这是通过 AJAX 执行的。
每个 POST 都通过了。
PDOException $e->getMessage() 没有 return 任何东西...我只是得到 rowCount 为 0。
这可能不是,但在您的查询中,您的 where 子句是 WHERE iditem=:itemid
,您的意思是 WHERE itemid=:itemid
吗?
您正在为您的专栏使用 desc
,这是一个 MySQL 保留字,没有用勾号转义它。
要么将其重命名为 "description" 之类的其他名称,要么将其包装在刻度中:
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
旁注:错误报告只能在试运行中进行,绝不能在生产中进行。
我正在尝试 post 将文本区域值 mysql table... 与其他一些字段和数据类型一起使用 PHP 的 PDO .当我从插入或更新中删除 textarea 字段 ('desc') 时,所有其他字段都会正确插入。当我在准备好的语句中包含 textarea ('desc') 时...查询失败。我为 table 中的 'desc' 字段尝试了几种不同的数据类型,包括文本、大文本、小文本、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 数组 return 背后的逻辑是,这是通过 AJAX 执行的。
每个 POST 都通过了。
PDOException $e->getMessage() 没有 return 任何东西...我只是得到 rowCount 为 0。
这可能不是,但在您的查询中,您的 where 子句是 WHERE iditem=:itemid
,您的意思是 WHERE itemid=:itemid
吗?
您正在为您的专栏使用 desc
,这是一个 MySQL 保留字,没有用勾号转义它。
要么将其重命名为 "description" 之类的其他名称,要么将其包装在刻度中:
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
旁注:错误报告只能在试运行中进行,绝不能在生产中进行。