数组而不是PHP中的单个项

数组而不是PHP中的单个项,php,mysql,pdo,fetch,Php,Mysql,Pdo,Fetch,这给了我一个包含两个项的数组,虽然查询输出应该是一个单元格,这可能是显而易见的,但对像我这样的初学者来说不是 $db = new PDO("mysql:host={$host};dbname={$dbname};charset=utf8", $username, $password, $options); $options = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'); function dbFetch($db,$

这给了我一个包含两个项的数组,虽然查询输出应该是一个单元格,这可能是显而易见的,但对像我这样的初学者来说不是

$db = new PDO("mysql:host={$host};dbname={$dbname};charset=utf8", $username, $password, $options); 
$options = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'); 

function dbFetch($db,$query)
    {
        $stmt = $db->prepare($query); 
        $stmt->execute(); 
        return $stmt->fetch();
    }

$query = " 
SELECT
Name
FROM Players WHERE PlayerID='21'"; 
$rows = dbFetch($db,$query);
var_dump($rows);
输出:

array(2) { ["Name"]=> string(6) "PLAYERNAME" [0]=> string(6) "PLAYERNAME" } 
它首先以关联形式重复输出,然后以数字形式重复输出。

尝试使用。它将返回第一条记录的第一列

function dbFetch($db,$query)
{
    $stmt = $db->prepare($query); 
    $stmt->execute(); 
    return $stmt->fetchColumn(0);
}
此外,我敢打赌,您搜索的不是“21”,而是一个变量。在这种情况下,您最好使用并修改代码,如下所示:

$db = new PDO("mysql:host={$host};dbname={$dbname};charset=utf8", $username, $password, $options); 
$options = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'); 
function dbFetch($db,$query,$params=[])
{
    $stmt = $db->prepare($query); 
    $stmt->execute($params); 
    return $stmt->fetch();
}

$query = " 
SELECT
Name
FROM Players WHERE PlayerID=?";
$params = array("your user id"); 
$rows = dbFetch($db,$query,$params);
var_dump($rows);

可能是由于获取样式

根据php手册:

公共语句::fetch([int$fetch_style[,int $cursor\u orientation=PDO::FETCH\u ORI\u NEXT[,int$cursor\u offset=0 ]]])从与PDO语句关联的结果集中获取行 对象fetch_样式参数确定PDO返回行的方式

fetch_样式控制如何将下一行返回给调用方。 此值必须是PDO::FETCH_*常量之一,默认为 PDO::ATTR_DEFAULT_FETCH_MODE的值(默认为 PDO::FETCH_两者)

FETCH_ASSOC:返回按列名索引的数组 在你的结果集中

FETCH_eath(默认):返回由这两列索引的数组 结果集中返回的名称和0索引列编号

FETCH_-BOUND:返回TRUE并指定列的值 在您的结果集中,设置与之绑定的PHP变量 PDOStatement::bindColumn()方法

PDO::FETCH_类:返回请求类的新实例, 将结果集的列映射到 类,然后调用构造函数,除非 PDO::还提供了FETCH_PROPS_LATE。如果你的风格包括 PDO::FETCH_类类型(例如PDO::FETCH_类| PDO::FETCH_类类型) 然后根据第一个值确定类的名称 专栏

PDO::FETCH_INTO:更新请求类的现有实例, 将结果集的列映射到类中的命名属性

PDO::FETCH_LAZY:将PDO::FETCH_和PDO::FETCH_OBJ结合起来,创建 对象变量在被访问时的名称

FETCH_NAMED:返回一个与 PDO::FETCH_ASSOC,除非有多个列具有 如果名称相同,则该键引用的值将是所有 具有该列名的行中的值

FETCH_NUM:返回一个按列号索引的数组 在结果集中,从第0列开始

FETCH_OBJ:返回一个匿名对象,其属性名为 与结果集中返回的列名相对应

PDO::FETCH_PROPS_LATE:与PDO::FETCH_类一起使用时 在分配属性之前调用类的构造函数 从相应的列值


您将获得关联索引和数字索引。只需将其与
$stmt->fetch(PDO::fetch_ASSOC)一起使用即可
你能理解为什么它会创建两个项目吗?@denski将同时获取数字和关联数据<代码>PDO::FETCH_eath嘿,我使用的是预先准备好的语句,只是想让它尽可能简单。非常感谢。那么在函数
$params=[]
中,如果
$params
没有值,则默认值为
[]
?酷!