我是PDO的新手,我正在尝试转换现有的PHP / MYSQL代码以满足PDO标准。
我遇到的问题是我可以连接到数据库,但没有显示任何结果,也没有显示错误。
这是我的数据库:
$db2 = new PDO('mysql:host=localhost;dbname=DATABASENAME;charset=utf8', 'USERNAME', 'PASSWORD');
$db2->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db2->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
我正在使用
include 'db.php';
在我的主PHP脚本中包含上述数据库详细信息。
我的主脚本使用以下作为select语句来显示符合条件的行:
<?
foreach($db2->query('SELECT view_invoice FROM user_info where username = "$timeapp_username"') as $inrow) {
$inrow['view_invoice']; //etc...
}
?>
运行此操作时,我没有错误但没有显示结果。我无法发现我做错了什么。谁能告诉我这里做错了什么?
答案 0 :(得分:1)
查询函数不安全,只能用于不返回数据的查询,如UPDATE,DELETE,INSERT ......
要进行安全且有效的SELECT查询,请使用PDOStatement准备查询。参见:
//Example querystring
$id = $_GET['id'];
try{
//Instantiate PDO
$pdo = new PDO('dsn', 'user', 'password');
//Create the statement
$statement = $pdo->prepare("SELECT * FROM `my_table` WHERE `id`=:id");
//Now you can bind values to the statement. This will automatically escape the values
//Defines the type of the value that you'll bind (optional)
$data_type = (is_numeric($id)) ? PDO::PARAM_INT : PDO::PARAM_STR;
//Replace the :id in the query by the value retrieved from the querystring
$statement->bindValue(':id', $id, $data_type);
//Now, let's execute our statement
$statement->execute();
//If the query has returned any rows, we can iterate over it
if ($statement->rowCount() > 0)
{
foreach ($statement->fetchAll() as $result)
{
//Now you can retrieve the values using the defined fetch method.
//Example with associative fetch mode:
echo 'My name is '.$result['name']."!";
echo '<br />';
}
}
else
{
//No results found
}
} catch (PDOException $pe){
die("An error has occurred: ".$pe->getMessage());
}