繁体   English   中英

如何将 MySQLi 准备好的语句中的单行单列存储在 PHP 变量中?

[英]How to store a single column of a single row out of a MySQLi prepared statement in a PHP variable?

我对 PHP 和 MySQL 非常陌生,我正在寻找一种解决方案,使用准备好的语句将数据库行的单个值存储在变量中。

现在这是准备好的语句和执行:

$emailsql = $conn->prepare("SELECT email FROM User WHERE email = ? limit 1;");
$emailsql->bind_param('s', $email);
$emailsql->execute();

我尝试了get_result()fetch()fetch_object() ,但我没有想法和谷歌搜索结果。

您需要将结果与特定变量的绑定添加到您的代码中

$emailsql->bind_result($emailResult);  

你去取它:

while($emailsql->fetch()){   
  printf ($emailResult); 
}

所以应该是这样:

$emailsql = $conn->prepare("SELECT email FROM User WHERE email = ? limit 1;");
$emailsql->bind_param('s', $email);
$emailsql->execute();
$emailsql->bind_result($emailResult); 
while($emailsql->fetch()){   
  printf ($emailResult); 
} 

如果您需要循环外的变量,我会采用这种方法:

$theEmail;
$emailsql = $conn->prepare("SELECT email FROM User WHERE email = ? limit 1;");
$emailsql->bind_param('s', $email);
$emailsql->execute();
$emailsql->bind_result($emailResult); 
while($emailsql->fetch()){   
  $theEmail=$emailResult; 
}  

请注意,您需要一个数组才能查询多封电子邮件。

@YourCommonSense 建议的另一种更清洁的方法是避免循环,如下所示:

$theEmail;
$emailsql = $conn->prepare("SELECT email FROM User WHERE email = ? limit 1;");
$emailsql->bind_param('s', $email);
$emailsql->execute();
$emailsql->bind_result($emailResult); 
$emailsql->fetch();   
printf($emailResult);

有两种方法。 另一个答案中解释的绑定结果方式,或者获取常规数组的传统方法

$stmt = $conn->prepare("SELECT 1 FROM User WHERE email = ?;");
$stmt->bind_param('s', $email);
$stmt->execute();
$res = $stmt->get_result(); 
$row = $res->fetch_row();
$value = $row ? $row[0] : null;

鉴于所有这些,您可能会考虑与 PDO 相比mysqli 的可用性有多差

$stmt = $conn->prepare("SELECT 1 FROM User WHERE email = ? limit 1;");
$stmt->execute([$email]);
$value = $stmt->fetchColumn(); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM