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