我正在运行2个查询,第一个查询正确并返回所需的值,但第二个返回false.
我已经设置$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);好了我应该得到一个异常而不是假,所以我猜这是我$stmt->execute();的罪魁祸首.
因为我已经设置了错误属性,所以这是唯一可以返回false的函数.我也曾尝试设置$stmt->closeCursor();,$stmt = null;以及unset($stmt);与无济于事.
这将执行两个查询(fetch_wallet()函数中的"darkrp"和"pointshop").
if($this->pdo) {
foreach($this->methods as $method => $bool) {
if($bool) { $array[$method] = $this->fetch_wallet($method); }
}
}
Run Code Online (Sandbox Code Playgroud)
这是fetch_wallet()功能:
public function fetch_wallet($type) {
if($type == "darkrp") {
$query = "SELECT `wallet` FROM `darkrp_player` WHERE uid=:uid LIMIT 1";
}
elseif ($type == "pointshop") {
$query = "SELECT `points` FROM `pointshop_data` WHERE uniqueid=:uid LIMIT 1";
}
try {
$stmt = $this->pdo->prepare($query);
$stmt->execute(array(":uid" => $this->uniqueid));
$result = $stmt->fetchColumn();
return $result;
}
catch (PDOException $e) {
return $e->getMessage();
}
}
Run Code Online (Sandbox Code Playgroud)
当我运行时,var_dump($stmt->errorInfo());我得到这个,这意味着两个查询运行正常,虽然最后一个返回false时应该返回440.没有异常被抛出.
array(3) {
[0]=> string(5) "00000"
[1]=> NULL
[2]=> NULL
}
array(3) {
[0]=> string(5) "00000"
[1]=> NULL
[2]=> NULL
}
Run Code Online (Sandbox Code Playgroud)
phpMyAdmin中的pointshop_data表的打印屏幕(我想要那里的440值):

返回var_dump($this->uniqueid);值为3266928646
我调试了所有东西,我没有任何错误,只是一个错误.
PHP版本: 5.3.10
MySQL版本: 5.5.38
操作系统: Ubuntu 12.04 LTS
我认为你的类中肯定会有一些其他错误导致这段代码不起作用.
我导入了表结构并创建了以下测试代码:
<?php
class A
{
private $pdo;
private $uniqueid;
private $methods = ['darkrp' => true, 'pointshop' => true];
public function __construct($pdo, $uniqueid)
{
$this->pdo = $pdo;
$this->uniqueid = $uniqueid;
}
public function fetch_wallet($type)
{
if ($type == "darkrp") {
$query = "SELECT `wallet` FROM `darkrp_player` WHERE uid=:uid LIMIT 1";
} elseif ($type == "pointshop") {
$query = "SELECT `points` FROM `pointshop_data` WHERE uniqueid=:uid LIMIT 1";
}
try {
$stmt = $this->pdo->prepare($query);
$stmt->execute(array(":uid" => $this->uniqueid));
$result = $stmt->fetchColumn();
return $result;
} catch (PDOException $e) {
return $e->getMessage();
}
}
public function run()
{
if ($this->pdo) {
foreach ($this->methods as $method => $bool) {
if ($bool) {
$array[$method] = $this->fetch_wallet($method);
var_dump($array[$method]);
}
}
}
}
}
$pdo = new PDO('mysql:host=localhost;dbname=tests', 'root', '');
$a = new A($pdo, 3266928646);
$a->run();
Run Code Online (Sandbox Code Playgroud)
我得到的结果是:
string(4) "2075" string(3) "440"
Run Code Online (Sandbox Code Playgroud)
所以它正在按预期工作.
请尝试此代码(这是整个文件 - 当然您需要更改您的数据库名称,用户和密码)并检查它是否会得到相同的结果.如果是,可能您的课程中还有其他错误.
| 归档时间: |
|
| 查看次数: |
2843 次 |
| 最近记录: |