我想把 MySQL 改成 PDO:
$mapa = mysql_fetch_array(mysql_query("select * from mapa where id = ".$postac['mapa']." limit 1"));
$mapa_d = mysql_query("select * from mapa_d where mapa = ".$mapa['id']." ");
PHP:
$_SESSION['postac'] = $_POST['postac'];
到目前为止这样尝试:
$stmt = $pdo->prepare("SELECT * FROM mapa WHERE id=:mapa");
$stmt->bindValue(':mapa', $postac, PDO::PARAM_STR);
$stmt->EXECUTE();
$postac = $stmt->fetchAll(PDO::FETCH_ASSOC);
mysql更新:
mysql_query("update postac set logged = 1 where id = ".$_SESSION['postac']." limit 1");
PDO:
$stmt = $pdo->prepare("update postac set logged = 1 where id:postac");
$stmt->bindValue(':postac', $_SESSION, PDO::PARAM_STR);
$stmt->EXECUTE();
$_SESSION = $stmt->fetchAll(PDO::FETCH_ASSOC);
不起作用。
最佳答案
答前注意事项:
我假设您已经设置了一个 PDO connection construct ($pdo
) 在尝试运行 PDO 查询之前。
$mapa = mysql_fetch_array( mysql_query("select * from mapa WHERE id = ".$postac['mapa']." limit 1")); $mapa_d = mysql_query("select * from mapa_d WHERE mapa = ".$mapa['id']." ");
PHP:
$_SESSION['postac'] = $_POST['postac'];
try like this so far:
$stmt = $pdo->prepare("SELECT * FROM mapa WHERE id=:mapa"); $stmt->bindValue(':mapa', $postac, PDO::PARAM_STR); $stmt->EXECUTE(); $postac = $stmt->fetchAll(PDO::FETCH_ASSOC);
第 1 部分:
保持一致
您的原始语句使用值 $postac['mapa']
作为 MySQL_
查询中的 id 引用,但随后您传递的 PDO 语句 整个数组 作为 PDO 查询的值。
首先,MySQL:id ==> $postac['mapa']
其次,PDO:id ==> $postac
因此,当您将整个数组传递给 PDO 时,这会立即导致问题,而 PDO 可能会以某种方式从该数组中提取一个值。这个数组被归类为 string
与你的 PDO::PARAM_STR
声明所以这阻止了查询使用这个值,因为它不符合它被告知的内容预计。
因此这将返回一个 NULL 查询。
所以要修复它,
$stmt = $pdo->prepare("SELECT * FROM mapa WHERE id=:mapa");
$stmt->bindValue(':mapa', $postac['mapa'], PDO::PARAM_STR);
$stmt->execute();
$postac = $stmt->fetchAll(PDO::FETCH_ASSOC);
第 2 部分:
语法
$stmt = $pdo->prepare("update postac set logged = 1 where id:postac"); $stmt->bindValue(':postac', $_SESSION, PDO::PARAM_STR); $stmt->EXECUTE(); $_SESSION = $stmt->fetchAll(PDO::FETCH_ASSOC);
如上所述,您将整个 $_SESSION
数组作为 PARAM_STR
值传递,因此它返回 VOID/NULL。你还有一个语法错误,你正在使用 WHERE id:postac
,但你的意思是 WHERE id = :postac
注意不要遗漏诸如 之类的语法=
!!。
第 3 部分:
错误检查
非常值得探索和学习如何在 PHP PDO 上获得有用的错误反馈,因为它可以节省您每天向 StackOverfow 发帖 X 次(希望如此!)! 有一个good answer here关于如何设置 PDO 以输出错误。 PHP Manual 也很值得浏览有关 PDO 错误检查的详细信息。
关于PHP/MySQL 到 PDO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38968262/