到目前为止我有这个代码
// Starts the transaction
self::$database->startTransaction();
try {
$sql = "SELECT playerId FROM players WHERE name=?";
$stmt = self::getConnection()->prepare($sql);
$stmt->bind_param('s', $playerName);
foreach ($playerNames as $key => $playerName) {
$stmt->execute();
$stmt->bind_result($playerId);
$stmt->fetch();
echo $playerId . "<br>";
}
// commits the transaction
self::$database->commit();
} catch (Exception $e) {
self::$database->rollback();
throw new Exception(__METHOD__." | ".$e->getMessage());
}
数组$playerNames
包含玩家的名字,例如
array('Player1', 'Player2', 'player3')
上面的代码应该从数据库中选择那些玩家的playerId。我有一些问题:
它只返回最后 playerId(在本例中为'player3'的Id)。我不知道为什么。
我使用foreach
- 循环到execute()
。如果数组中有数百个名称,这对性能有害吗?
在generell中:这是SELECT
或INSERT
来自或进入数据库的东西的正确方法吗?
我读到了这个问题:How can I prevent SQL injection in PHP?
但由于这个原因,它并没有真正起作用:
$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
// do something with $row
}
我的getResult()
- 方法出错了。它说,该方法不存在。我认为我的网站空间不支持它,我无法手动安装它。所以我需要坚持fetch()
。
或者它可能有其他原因吗?
答案 0 :(得分:2)
$sql = "SELECT playerId FROM players WHERE name=?";
$stmt = self::getConnection()->prepare($sql);
$stmt->bind_param('s', $playerName);
$stmt->bind_result($playerId);
foreach ($playerNames as $key => $playerName) {
$stmt->execute();
$stmt->fetch();
echo $playerId . "<br>";
}