在PHP中,MySQL整数字段以整数形式返回

3

我知道当MySQL返回数据时,无论MySQL的数据类型如何,它都会返回字符串。

那么为什么当我运行此预处理语句时,我会得到一个整数?

    $id = '1';

    sql = "SELECT * FROM
            USER
            WHERE user_id = ? ";

    $stmt = $this->conn->prepare($sql);
    $stmt->bind_param('i', $id);
    $stmt->execute();

    $user = $stmt->get_result();

    return ($user->num_rows == 1) ? $user : NULL ;


    if ($user) {

    while($row = $result->fetch_assoc()) {
        $data = array();
        $data["user_id"]      = $row["user_id"];

    return $data; 

当我运行php gettype($data['user_id'])时,得到的是一个整数。
我认为数据类型总是会被转换为字符串。

'i' 表示 mysqli 绑定函数的这个数据库列是整数类型,当参数被该值替换时,$id 应该被视为整数处理。它并没有描述 $id 的内容是什么。 - RiggsFolly
变量 $id 的内容为 '1'。 - yakir30
谁说它总是返回一个字符串的? - JordanH
顺便说一下,当结果为零或多个时,最后一个 if 语句不会被执行,您的函数将返回 NULL :) - niceman
还有,你怎么知道你得到了一个整数,PHP是动态类型的,你知道的 :) - niceman
显示剩余3条评论
1个回答

2
它并不总是返回字符串。也许您正在使用PHP版本高于5.3(PHP 5.3版本是使用mysqlnd编译的(而不是旧的libmysql)),使用mysqlnd作为本地驱动程序,本地驱动程序适当地返回整数类型。请检查您当前使用的版本。有关更多详细信息,请参阅此链接。 http://blog.ulf-wendel.de/2008/pdo_mysqlnd-the-new-features-of-pdo_mysql/

1
这会破坏我的应用程序,当我使用mysqli非预处理语句时,我总是得到一个字符串,现在当我转向预处理语句时,无论我是否传递$stmt->bind_param('s', $id),我总是得到一个整数。 $_SESSION['id'] === $_GET['id'] 不成立。 - yakir30
即使现在它仍然出现错误,有时是字符串,有时是整数,这似乎是一个bug? - Jones G

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接