【发布时间】:2013-10-03 23:22:50
【问题描述】:
所以我在这里创建了一个函数。当我使用 postgres 数据库时它可以工作,但是一旦我切换到 mysqli,由于某种原因,它不会返回 id。这是我的功能:
function getAccID($connection, $username){
$res = mysqli_query($connection, "SELECT accounts_id FROM people WHERE people.username ='$username'");
if ($res){
$row = mysqli_fetch_assoc($res);
if ($row){
return ($row[0]);
}
}else{
//handle the error
}
}
这是我声明函数的方式:
$accountID = getAccID($connection, $user);
$p->addContent("Account ID: $accountID");
if (!$accountID) $p->addContent('Error: ' . mysqli_error($connection) . "<br>");
PS:如果有人使用 mysqli_query 而不是准备语句对我说任何话,我会谋杀一些婴儿:L。我正在用它来测试,一旦一切正常,就很容易切换到准备好的语句。
已修复
问题在于 Postgres 我可以使用字段的 id,但对于 mysqli,我必须使用名称。
因此这是行不通的
$row[0];
必须是:
$row["name_of_field"];
【问题讨论】:
-
(如果你要“测试”一些东西,为什么不测试将要使用的实际东西呢?)
-
因为我喜欢边做边测试。这就是我的工作方式。
-
并且使用查询进行测试比使用准备好的语句更容易。
-
(如果你要切换到别的东西,你不是在测试它;这是一个不合适的模拟场景。)
-
无论如何,1) 在“处理错误”中做一些事情,并且; 2) 验证
mysqli_fetch_assoc的结果是您认为的结果 - 即有 are 结果并且您在所述行中返回所需的值(我看到一个可疑的if,不是传统的while,也不是$row["accounts_id"])。就像现在一样,非此即彼可能会“失败”,这将导致意外结果 - 主要是没有有用的返回值 - 由于执行流路径不完整。