PHP/MySQL 到 PDO

标签 php mysql pdo

我想把 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/

相关文章:

mysql - 集群 MySQL 数据库中的纬度经度数据

php - 表名作为变量

php - sql case 查询时参数编号无效错误

php - 从 mysqli 数据库、PHP 语句中检索到的字符串不完整

javascript - 如何默认隐藏表单并在点击时显示

php - 在sql查询中获取递归数据

php - 如何在 PHP 5.5 和 MSSQL 中使用 PDO

php - SELECT * FROM table1 INNER JOIN table2 ON table1.id=table2.id WHERE 子句

php - sql垃圾收集与清理php中的查询

java - 配置 Springboot 以使用 2 个不同的数据库