【问题标题】:How do I display/echo the data from an executed mysqli prepared statement如何显示/回显执行的 mysqli 准备语句中的数据
【发布时间】:2016-10-05 14:06:06
【问题描述】:

我正在尝试了解如何防止注射。在此之前,我的代码结构如下。

$empid = $_REQUEST['empid']
$query =("SELECT e.first AS first, e.last AS last, e.username AS uname FROM emps e WHERE e.id='$empid'"); 
$result = mysqli_query($con, $query);?>

然后在我的身体中显示找到的用户名,我会的。

<?php $row = mysqli_fetch_assoc($result);?>
<?php echo $row['uname'] ;?>

我正在尝试用 mysqli 准备好的语句来完成同样的事情。到目前为止,我有以下内容。

$query= $con->prepare("SELECT e.first AS first, e.last AS last, e.username AS uname FROM emps e WHERE e.id=?");
$query->bind_param("i", $empid);
$query->execute();
$query->close();

所以我很确定语句设置正确,但现在需要将返回的列回显到我网页上的正文

【问题讨论】:

  • 问题是关于回声不准备。所以有一个 echo dupe 目标关闭。请做一些研究:p
  • @Drew 这个链接没有帮助。它没有解决问题
  • 所以我很确定该语句设置正确,但现在需要将返回的列回显到我网页上的正文 ...以及引用的目标显示。谢谢。好好的。
  • @craisondigital 在while 循环中运行fetch(),但首先绑定结果。这就是您从准备好的语句中回显行的方式。
  • @Drew “引用的目标确实表明了这一点” - 这里的 OP 想要从准备好的语句中回显行。引用的目标(答案)不包括它的方法;这里有两种不同的动物,我必须在这里靠在 OP 的一边;-) 我觉得应该重新提出这个问题。编辑:grazie!

标签: php mysql mysqli prepared-statement


【解决方案1】:

编辑: 在执行后添加这些规则。

$res = $query->get_result();
$row = $res->fetch_assoc();

然后你就可以用旧方法做你以前用它做的事情了。

【讨论】:

  • 他们在这里使用 mysqli_,而不是您留下的链接中的 PDO php.net/manual/en/pdo.prepared-statements.php - 两种不同的动物。
  • 谢谢@Roy Stijsiger,我现在将对此进行测试。
  • @craisondigital 我更改了这个回复
  • @Fred-ii- 我改了
  • 但是,get_result() 可能无法在他们的系统上使用。我知道“我”不能在我的身上使用它,需要将结果绑定在一个循环中。只是说;-)
【解决方案2】:

常规建议。考虑使用 PDO 代替 mysqli。只是为了向您展示不同之处。你的代码:

$query= $con->prepare("SELECT first, last, username AS uname FROM emps WHERE id=?");
$query->bind_param("i", $empid);
$query->execute();
$res = $query->get_result();
$row = $res->fetch_assoc();

PDO:

$query= $con->prepare("SELECT first, last, username AS uname FROM emps WHERE id=?");
$query->execute([$empid]);
$row = $query->fetch();

几乎缩短了两倍。

请记住,get_result 不保证可用。它在您的本地开发人员上可以正常工作,但请检查您是否在生产服务器上拥有它。

虽然 PDO 没有这样的问题

【讨论】:

  • 谢谢@Your常识。我已经读过这个,但你的例子很容易理解。我回来后会测试一下。
  • 我看不到问题。尝试 var_dump $row 可能。光看很难分辨。
  • 是的,PDO 兼容一切。那么 FALSE 意味着您的查询没有返回任何内容。
  • 我已经完成了这项工作。我必须创建一个新的 pdo 连接。另外,我不得不移动 $query->close();显示所有结果后到我的页面正文的末尾。如果这看起来正确,并且您将它们作为脚注添加到上面的答案中,我会将其标记为答案。非常感谢您的宝贵时间和您的出色指导link
猜你喜欢
  • 2010-11-01
  • 2020-06-19
  • 1970-01-01
  • 2018-04-13
  • 1970-01-01
  • 2012-03-17
  • 2014-06-16
  • 2012-01-31
  • 2012-08-12
相关资源
最近更新 更多