【问题标题】:Whenever string value is converted it is being changed to 1 - PHP每当转换字符串值时,它都会更改为 1 - PHP
【发布时间】:2018-04-02 23:02:03
【问题描述】:

我在将字符串值转换为 num 值时遇到问题。这似乎只是 $rows 变量的问题,因为我尝试将整数存储在字符串中,例如: $s="2" 并且能够将其转换为正确的整数没问题。

       //Where email input is being grabbed           
       $sanemail=mysqli_real_escape_string($con, $_POST['email']); 

       //User_id is being grabbed
       $sql8="SELECT user_id FROM users WHERE email='".$sanemail."'";
       $result=mysqli_query($con,$sql8);
       $rows=mysqli_fetch_assoc($result);
       $user_id=(int)$rows;
       var_dump($rows);
       var_dump($user_id);

var_dump($rows) 返回 "2" 并且由于某种原因 var_dump($user_id) 返回 1。即使 $rows= "3" 似乎也会发生这种情况 有谁知道问题出在哪里?

【问题讨论】:

  • 警告:当使用mysqli 时,您应该使用parameterized queriesbind_param 将用户数据添加到您的查询中。 请勿使用手动转义和字符串插值或连接来完成此操作,因为您将创建严重的SQL injection bugs。意外未转义的数据是一个严重的风险。使用绑定参数不那么冗长,并且更容易检查以检查您是否正确执行。
  • 注意:试着改掉在一次性变量中声明 SQL 语句的习惯,这些变量只使用一次。在将查询直接提供给函数的情况下,跟踪代码要容易得多,并且不再有可能搞砸并发送$sql3而不是视觉上相似的$sql8
  • 注意:mysqli 的面向对象接口明显不那么冗长,使代码更易于阅读和审核,并且不容易与过时的mysql_query 接口混淆。在您对程序风格投入过多之前,值得转换一下。示例:$db = new mysqli(…)$db->prepare("…") 程序接口是 PHP 4 时代引入的 mysqli API 的产物,不应在新代码中使用。
  • 为什么要将数组mysqli_fetch_assoc 转换为int?就是想。试试$user_id=(int)$rows['user_id']; 并请注意其他人所说的^以上^他们都是很棒的cmets。

标签: php mysql string integer


【解决方案1】:

mysqli_fetch_assoc 为查询结果返回一个数组。解释可以在here找到。当您尝试将数组转换为 int 时,它将具有未定义的结果,如 documentation 所示。本质上,它会返回 1,因为数组不为空。

换行: $user_id=(int)$rows;$user_id=(int)$rows['user_id']; 获取整数值而不是数组

【讨论】:

    猜你喜欢
    • 2012-05-23
    • 2012-06-01
    • 1970-01-01
    • 2016-09-28
    • 1970-01-01
    • 2018-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多