Php 将Mysql更改为PDO
我正在尝试使用PDO创建一个购物网站。到目前为止,我已经用老方法做了,在过去的6天里,我一直在尝试在PDO中做这件事。请找个人帮忙。我该怎么做呢Php 将Mysql更改为PDO,php,pdo,echo,session-variables,Php,Pdo,Echo,Session Variables,我正在尝试使用PDO创建一个购物网站。到目前为止,我已经用老方法做了,在过去的6天里,我一直在尝试在PDO中做这件事。请找个人帮忙。我该怎么做呢 dbconnect(); $i = 0; foreach ($_SESSION["cart_array"] as $each_item) { $item_id = $each_item['item_id']; $sql = mysql_query("SELECT * FROM product WHER
dbconnect();
$i = 0;
foreach ($_SESSION["cart_array"] as $each_item) {
$item_id = $each_item['item_id'];
$sql = mysql_query("SELECT * FROM product WHERE ID='$item_id' LIMIT 1");
while ($row = mysql_fetch_array($sql)) {
$product_name = $row["Name"];
$price = $row["Cost"];
$details = $row["Description"];
}
猜测dbconnect()函数包含创建到数据库的连接的代码。以下是如何建立良好的PDO连接:
try {
$pdo = new PDO($dsn, $user, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
您可以在此处阅读MySQL格式的$dsn文档:
那么,代码的其他部分将是这样的:
foreach ($_SESSION["cart_array"] as $each_item) {
$item_id = $each_item["item_id"];
$sql = "SELECT * FROM Hair_category WHERE Hair_ID=:item_id LIMIT 1");
$stmt = $pdo->prepare($sql);
$stmt->execute(array(":item_id"=>$item_id));
while ($row = $stmt->fetch()) {
$product_name = $row["Name"];
$price = $row["Start_Cost"];
$details = $row["Brief_Description"];
}
}
如果这导致任何错误,它将抛出异常,因为我在创建连接后立即设置了该属性。事实上,您当前的代码效率很低。与其运行多个查询,不如只运行一个查询来获取所有项目
dbconnect();
if($_SESSION["cart_array"]) {
// that's quite tricky part.
// have to create a string of placeholders like ?,?,?
$in = str_repeat('?,', count($_SESSION["cart_array"]) - 1) . '?';
// the rest is quite simple:
$sql = "SELECT * FROM Hair_category WHERE Hair_ID= IN($in)";
$stm = $pdo->prepare($sql);
$stm->execute($_SESSION["cart_array"]);
$data = $stm->fetchAll();
}
现在您拥有了$data
数组中的所有项,并且可以在其他地方(可能在模板中)迭代它
您可以在中看到dbconnect()的正确代码,我是这样做的,它工作正常。谢谢大家的帮助
$total_cart_items = count($_SESSION["cart_array"]);
dbconnect();
foreach ($_SESSION["cart_array"] as $each_item) {
$item_id = $each_item['item_id'];
$stmt = $conn->prepare("SELECT * FROM product WHERE pid=:id");
$stmt->bindParam('id',$item_id);
$stmt->execute();
$row = $stmt->fetch(PDO::FETCH_ASSOC);
$product_name = $row["Name"];
$price = $row["Cost"];
$details = $row["Description"];
}
尝试阅读官方PDO文档并注意示例。你唯一需要做的重大改变是在MySQL查询中使用参数的方式。你是说你想让我们重写代码来为你使用PDO吗?不,我只是想知道如何从$sql=MySQL_查询(“SELECT*from products WHERE id='$item_id'LIMIT 1');但包括dbconnect();我对其进行了编辑,以显示我在执行会话时遇到的问题什么是
dbconnect()
?匿名投票人:请解释您认为此答案错误或不合适的原因。也许我可以改进一下。