mysql_ -> PDO |我怎样才能达到相同的结果
mysql_ -> PDO | How can I achieve the same result
由于我在我的服务器上将PHP更新为PHP 5.5,我想使用PDO而不是mysql_重写一个项目。
在这个项目中,我有一个控制器和一个模型(自然也是一个视图,但这并不重要:-))
在 "old" 版本中,代码如下所示:
控制器(mysql_)
public function saveAction()
{
$iFilterID = filter_input(INPUT_POST, 'id');
$this->_setRealEscape($iFilterID);
$iReqID = $this->_getRealEscape();
if (isset($_REQUEST['aLinks']))
{
$this->oSubCat = new links ();
if (isset($iFilterID))
{
$this->oSubCat->loadLinksID($iReqID);
}
foreach ($_REQUEST['aLinks'] AS $key => $value)
{
$value = $this->_cleanString($value);
$this->oSubCat->$key = $value;
}
}
$this->oSubCat->saveLinks();
}
模型(mysql_)
public function loadLinksID($id)
{
$sSql = "SELECT * FROM links WHERE id =".$id;
$query = mysql_query($sSql);
$oLinks = mysql_fetch_object($query);
if(is_object($oLinks))
{
foreach ($oLinks as $key => $value)
{
$this->$key = $value;
}
}
}
public function saveLinks ()
{
if ($this->id)
{
$this->updateLinks();
}
else
{
$this->insertLinks();
}
}
public function updateLinks ()
{
$sSql = "UPDATE links SET";
$first = true;
foreach ($this as $property => $value) {
if ($first) {
$first = false;
$sSql .= " $property='$value'";
} else {
$sSql .= ", $property='$value'";
}
}
$sSql .= " WHERE id = ".$this->id;
mysql_query($sSql);
header("location: index.php?module=helper&action=success&func=links");
}
在 PDO 版本中它看起来像这样:
控制器 (PDO)
public function saveAction()
{
$iFilterID = filter_input(INPUT_POST, 'id');
if (isset($_REQUEST['aLinks']))
{
$this->oSubCat = new links ();
if (isset($iFilterID))
{
$this->oSubCat->loadLinksID($iFilterID);
}
foreach ($_REQUEST['aLinks'] AS $key => $value)
{
$this->oSubCat->$key = $value;
}
}
$this->oSubCat->saveLinks();
}
型号 (PDO)
public function loadLinksID($id)
{
$PDOpre = $this->connection->prepare("SELECT * FROM links WHERE id =:id");
$PDOpre->bindvalue(':id',$id, PDO::PARAM_STR);
$PDOpre->execute();
$oLinks = $PDOpre->fetch(PDO::FETCH_OBJ);
if(is_object($oLinks))
{
foreach ($oLinks as $key => $value)
{
$this->$key = $value;
}
}
}
public function saveLinks ()
{
if ($this->id)
{
$this->updateLinks();
}
else
{
$this->insertLinks();
}
}
public function updateLinks ()
{
$sSql = "UPDATE links SET";
$first = true;
foreach ($this as $property => $value) {
if ($first) {
$first = false;
$sSql .= " $property='$value'";
} else {
$sSql .= ", $property='$value'";
}
}
$sSql .= " WHERE id = ".$this->id;
echo $sSql;
$this->connection->query($sSql);
header("location: index.php?module=helper&action=success&func=links");
}
mysql_-Version 工作正常但 PDO 版本显示:
Catchable fatal error: Object of class PDO could not be converted to string in /.../httpdoc/new/model/class.links.php on line 61
第 61 行 = $sSql .= " $property='$value'";
public 函数 updateLinks()
我是 PDO 的新手,现在完全不知所措。
谁能告诉我正确的方向,如何解决这个问题。
非常感谢您的帮助。
提前致谢
马克
我已经使用此 Answer . It uses lazy binding.PDO Info
修改了您的代码
public function updateLinks ()
{
$query_params = array();Array to hold parameters for lazy binding
$sSql = "UPDATE links SET";
$first = true;
foreach ($this as $property => $value) {
if ($first) {
$sSql .= " $property=?";
$first = false;//Set after first
} else {
$sSql .= ", $property =?";
}
array_push($query_params,$value);//Push values into array
}
array_push($query_params,$this->id);
$sSql .= " WHERE id = ?";
echo $sSql;
$stmt = $this->connection->prepare($sSql);
$result = $stmt->execute($query_params);
header("location: index.php?module=helper&action=success&func=links");
}
由于我在我的服务器上将PHP更新为PHP 5.5,我想使用PDO而不是mysql_重写一个项目。 在这个项目中,我有一个控制器和一个模型(自然也是一个视图,但这并不重要:-)) 在 "old" 版本中,代码如下所示:
控制器(mysql_)
public function saveAction()
{
$iFilterID = filter_input(INPUT_POST, 'id');
$this->_setRealEscape($iFilterID);
$iReqID = $this->_getRealEscape();
if (isset($_REQUEST['aLinks']))
{
$this->oSubCat = new links ();
if (isset($iFilterID))
{
$this->oSubCat->loadLinksID($iReqID);
}
foreach ($_REQUEST['aLinks'] AS $key => $value)
{
$value = $this->_cleanString($value);
$this->oSubCat->$key = $value;
}
}
$this->oSubCat->saveLinks();
}
模型(mysql_)
public function loadLinksID($id)
{
$sSql = "SELECT * FROM links WHERE id =".$id;
$query = mysql_query($sSql);
$oLinks = mysql_fetch_object($query);
if(is_object($oLinks))
{
foreach ($oLinks as $key => $value)
{
$this->$key = $value;
}
}
}
public function saveLinks ()
{
if ($this->id)
{
$this->updateLinks();
}
else
{
$this->insertLinks();
}
}
public function updateLinks ()
{
$sSql = "UPDATE links SET";
$first = true;
foreach ($this as $property => $value) {
if ($first) {
$first = false;
$sSql .= " $property='$value'";
} else {
$sSql .= ", $property='$value'";
}
}
$sSql .= " WHERE id = ".$this->id;
mysql_query($sSql);
header("location: index.php?module=helper&action=success&func=links");
}
在 PDO 版本中它看起来像这样:
控制器 (PDO)
public function saveAction()
{
$iFilterID = filter_input(INPUT_POST, 'id');
if (isset($_REQUEST['aLinks']))
{
$this->oSubCat = new links ();
if (isset($iFilterID))
{
$this->oSubCat->loadLinksID($iFilterID);
}
foreach ($_REQUEST['aLinks'] AS $key => $value)
{
$this->oSubCat->$key = $value;
}
}
$this->oSubCat->saveLinks();
}
型号 (PDO)
public function loadLinksID($id)
{
$PDOpre = $this->connection->prepare("SELECT * FROM links WHERE id =:id");
$PDOpre->bindvalue(':id',$id, PDO::PARAM_STR);
$PDOpre->execute();
$oLinks = $PDOpre->fetch(PDO::FETCH_OBJ);
if(is_object($oLinks))
{
foreach ($oLinks as $key => $value)
{
$this->$key = $value;
}
}
}
public function saveLinks ()
{
if ($this->id)
{
$this->updateLinks();
}
else
{
$this->insertLinks();
}
}
public function updateLinks ()
{
$sSql = "UPDATE links SET";
$first = true;
foreach ($this as $property => $value) {
if ($first) {
$first = false;
$sSql .= " $property='$value'";
} else {
$sSql .= ", $property='$value'";
}
}
$sSql .= " WHERE id = ".$this->id;
echo $sSql;
$this->connection->query($sSql);
header("location: index.php?module=helper&action=success&func=links");
}
mysql_-Version 工作正常但 PDO 版本显示:
Catchable fatal error: Object of class PDO could not be converted to string in /.../httpdoc/new/model/class.links.php on line 61
第 61 行 = $sSql .= " $property='$value'";
public 函数 updateLinks()
我是 PDO 的新手,现在完全不知所措。
谁能告诉我正确的方向,如何解决这个问题。
非常感谢您的帮助。
提前致谢
马克
我已经使用此 Answer . It uses lazy binding.PDO Info
修改了您的代码public function updateLinks ()
{
$query_params = array();Array to hold parameters for lazy binding
$sSql = "UPDATE links SET";
$first = true;
foreach ($this as $property => $value) {
if ($first) {
$sSql .= " $property=?";
$first = false;//Set after first
} else {
$sSql .= ", $property =?";
}
array_push($query_params,$value);//Push values into array
}
array_push($query_params,$this->id);
$sSql .= " WHERE id = ?";
echo $sSql;
$stmt = $this->connection->prepare($sSql);
$result = $stmt->execute($query_params);
header("location: index.php?module=helper&action=success&func=links");
}