php - 如何从我的 PDO 查询中提取一行?
问题描述
我在此代码的第 18 行遇到语法错误,这是包含变量 {$user} 的部分。
我想从查询中提取 3 个变量并将它们放入代码中的 PHP 变量中。
$user = 'xxxxx';
$password = 'xxxxx';
$db = 'xxxxx';
$host = 'xxxxx';
$conn = new PDO("mysql:host=$host; dbname=$db", $user, $password);
//$conn = new PDO("mysql:host=$host;dbname=$db;charset=utf8", $user, $password, [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]);
//7 day users
$query = "SELECT user,email_address,DATEDIFF(NOW(),OrderDate) AS DateDiff
FROM MyTable WHERE DATEDIFF(NOW(),OrderDate) >= 6 AND enabled = 1 AND products_id IN (377) AND user = 'xxxxx'";
$stmt = $conn->query($query);
while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
extract($row);
$to = "aa@ab.com";
$subject = "expiries - ";
$message = {$user};
$from = "aa@ab.com";
$headers = "From: $from";
mail($to,$subject,$message,$headers);
}
预期的结果应该是将用户从 SQL 查询中获取到一个名为 $message 的变量中
解决方案
一个while
循环->fetch
是多余的。Fetch以数组格式返回单行数据。因此,这里不需要 while 循环(因为循环的预期用途是循环数据)。
从文档:
PDOStatement::fetch — 从结果集中获取下一行
FETCH_ASSOC:
PDO::FETCH_ASSOC: 返回一个按列名索引的数组,如结果中返回的那样此函数成功时的返回值取决于获取类型。在所有情况下,失败时返回 FALSE。
所以它返回一个数组。只需简单地使用:
try {
$data = $stmt->fetch(PDO::FETCH_ASSOC);
$column = $data['column'];
# your code
} catch (Exception $e) {
# err handling
}
根据评论编辑:
如果结果集有多行,你如何遍历它们?
您可以使用foreach
循环使用->fetchAll()
PDOStatement::fetchAll — 返回一个包含所有结果集行的数组
# here we declare our SQL and pass in params for a prepared statement
$sql = 'SELECT * FROM table where `field` = :value;';
$res = $conn->prepare($sql);
$res->execute(array(':value' => $_POST['value'])); # exec the qry
# loop through the data and print_r $row
foreach ($res->fetchAll(PDO::FETCH_ASSOC) as $row)
{
echo '<pre>'. print_r($row, 1) .'</pre>';
}
推荐阅读
- vba - ScreenUpdating 的值在设置为 False 后没有变化
- jquery - jquery - 为每个产品使用 .each() 一次以插入新价格
- python - Python 最佳拟合算法 -
- java - 当被调用者成员发生序列化异常时,Hazelcast 调用者成员抛出超时异常
- linux-device-driver - linux如何以及何时扫描MBR和GPT?
- react-native - 如何在没有反馈的情况下从可触摸获取数据
- cisco - 思科 Meraki 室内定位
- javascript - 如何重构这个命令式 JS 使其具有功能性?
- cordova - 我正在构建一个旧版本的离子应用程序,最终出现此错误
- php - PHP数组值到变量