PHP查询到MySQL返回单值

时间:2016-01-14 02:17:57

标签: php mysql

我是PHP和SQL的新手。我是android的java和XML开发人员。我在这里遇到问题,因为我只需要返回一个值,并且似乎无法从pdo准备的查询中获取它。我正在寻找的只是返回devId"设备ID"从一张桌子插入另一张桌子。 " USER_ID"是自动递增的主要和代表不同的用户。每一行都有一个" devId" varchar()列。请帮帮我。我需要" devId"的值。对于" user_id"我经过了。非常简单,你会想到返回这个单一值。

$query = $pdo->prepare("SELECT devId FROM accounts WHERE user_id='{$user->user_id}'");
$query->execute();
$result = $query->fetchAll();
$pdo->exec("INSERT INTO devicesTable(devId) VALUES('{$result[0]}')");

3 个答案:

答案 0 :(得分:3)

如果使用->fetchAll(),则返回所有结果,但返回到关联数组数组

这可能会更容易,因为您只有一个结果行,其中包含一列

$stmt = $pdo->prepare("SELECT devId 
                        FROM accounts 
                        WHERE user_id=:id");

$stmt->bindParam(':id', $user->user_id, PDO::PARAM_INT);

$stmt->execute();

$stmt->bindColumn('devId', $devId);
$stmt->fetch(PDO::FETCH_BOUND)) 

$cnt = $pdo->exec("INSERT INTO devicesTable(devId) VALUES('$devId')");

if ( $cnt === FALSE ) {
    echo 'Nothing inserted';
    print_r($db->errorInfo());
} else {
    echo "Inserted $cnt rows";
}

答案 1 :(得分:0)

fetchAll()方法返回一个数组数组。第一个数组是行,因此$result[0]$result[1]等等将是第一行,第二行和后续行的关联数组。然后,您必须按名称访问该列:例如$result[0]['devId']

但你必须确保该行实际存在

if(!empty($result))
    $pdo->exec("INSERT INTO devicesTable(devId) VALUES('{$result[0]['devId']}')");

但是,如果您不需要devId其他任何内容,您可以在一个查询中写下

"INSERT INTO devicesTable(devId) SELECT devId FROM accounts WHERE user_id='{$user->user_id}'"

此外,您正在使用预准备语句。你已经有了这些,所以请使用参数而不是连接字符串。

$stmt = $pdo->prepare("INSERT INTO devicesTable(devId) SELECT devId FROM accounts WHERE user_id=:userId");
$stmt->execute([':userId'=>$user->user_id]);

答案 2 :(得分:0)

首先,PDOStatement::fetchAll()返回 2维数组,其中包含所有结果集的行;第二,那不是你如何使用准备好的陈述。

准备语句背后的想法是,在准备它时插入占位符,然后在执行时将占位符绑定到特定值,并且可以使用不同的绑定值重复执行查询而无需重新分析查询。此外,准备好的语句会自动处理类型匹配,引用和转义等详细信息。

$stmtSel = $pdo->prepare("SELECT devId 
                        FROM accounts 
                        WHERE user_id=:id");

$stmtSel->bindParam(':id', $user->user_id, PDO::PARAM_STR);

$stmtSel->execute();

$stmtSel->bindColumn('devId', $devId);
$stmtSel->fetch(PDO::FETCH_BOUND)) 

$stmtIns = $pdo->prepare('INSERT INTO devicesTable (devId) VALUES(:devId)')
$pdo->execute(array(':devId' => $devId));

(请注意,这与RiggsFolly的解决方案几乎相同,只是我使用两个预先存储在单独变量中的预准备语句,因此可以重复使用它们。)