【问题标题】:Getting Illegal string offset Warning while fetching data获取数据时出现非法字符串偏移警告
【发布时间】:2017-07-30 06:57:29
【问题描述】:
$cq = "SELECT * FROM salescard WHERE custid = '$custid'";
$rq = mysqli_query($conn,$cq);
if ($c = mysqli_fetch_array($rq, MYSQLI_ASSOC)) {

$edate =$c['expdate'];
$ono = $c['orderno'];
$cno = $c['cardno'];
$c = $c['cvv'];
$email = $c['email'];
$no = $c['no'];

}

我正在从表中获取数据并回显上面获取的变量。

除了 $email 和 $no,所有变量都会正确回显。

Warning: Illegal string offset 'email' in 
C:\xampp\htdocs\erp\admin\viewsales\card.php on line 94

Warning: Illegal string offset 'no' in 
C:\xampp\htdocs\erp\admin\viewsales\card.php on line 95

我只知道这个警告与在预期数组的位置定义变量有关。

只有两个变量显示错误,其余变量正确获取 我怎样才能使它正常工作?

编辑

我的销售卡表中肯定有这两列,并且我能够从另一个表单将数据存储到其中。

$email = $c['email'];
$no = $c['no'];

这是第 94 行和第 95 行

我想在这里显示数据

<div class="form-group half left clear">
  <input type="text" value="<?php echo $email;?>" name="email" />
  <label class="control-label" for="input">Email Address</label><i 
class="bar"></i>
</div>

 <div class="form-group half right">
  <input type="text" value="<?php echo $no;?>" name="no" />
  <label class="control-label" for="input">Contact number</label><i 
class="bar"></i>       
 </div>

【问题讨论】:

  • 您的salescard 表中有email,no 列吗?另外,您在哪里使用这些变量可以显示该代码(如 94,95 行)吗?

标签: php mysql


【解决方案1】:

你覆盖了第 93 行的 $c,并把它变成了一个字符串。

$c = $c['cvv'];

应该是:

$cvv = $c['cvv'];

【讨论】:

  • 这也强调了具有有意义变量名的重要性。 $array 或 $data 比 $c 更适合。
  • 该死!!这些小错误真的让我花了一些时间..用短变量名节省时间确实适得其反..无论如何谢谢:)
  • @Arun 您似乎正在使用看起来像... WHERE custid = '$custid'"; 的代码处理信用卡数据,这真是太可怕了> 可接受的做法。此代码似乎容易受到 SQL 注入的影响。如果你从一本书中学到了这一点,你应该放火烧书。
  • @Michael-sqlbot。我承认目前尚不清楚谁提供 $custid。但如果没有这些信息,您的评论似乎很苛刻。如果 $custid 的来源不可信,并且 $custid 没有经过清理,那么您是绝对正确的。
  • @jh1711 同意,这听起来确实很刺耳。这是对“节省时间”概念的回应(尽管我没有明确这么说)——构建这样的查询是“容易的”,但这种做法的危险性怎么强调都不为过。即使像“受信任”和“已清理”这样的概念也不足以成为串联的充分理由,因为随后的重构可以撤消这些事情,而撤消可能会被忽视。顺便说一句,请注意答案。看到魔术字符串“cvv”是最初让我感到震惊的原因。 CVV 永远不应该存储在数据库中。您在授权后丢弃它。
猜你喜欢
  • 2014-02-16
  • 2021-09-30
  • 2013-09-13
  • 2020-08-17
  • 2013-04-11
  • 2012-04-09
  • 2019-07-28
相关资源
最近更新 更多