我有以下 php/pdo,它调用一个返回文件名的 mysql 过程,但是尽管准备好的语句是正确的并从剪切和粘贴的数据库查询中返回以下内容:
数据库查询/结果
> call sp_CDRbyCustomer('Wind', 'R2X', DATE(DATE_SUB(NOW(), INTERVAL 10 WEEK)), DATE(NOW()));
> +------------------------------------------------------+
> | Exported filename |
> +------------------------------------------------------+
> | '/tmp/CDR_for_Wind_20140704-20140912_1410516460.csv' |
> +------------------------------------------------------+
> 1 row in set (0.02 sec)
php/pdo
应该返回我们的文件名是:
include('db.ini');
define('DEBUG', true);
if (DEBUG ) {
openlog("$iam", LOG_PID | LOG_ODELAY,LOG_LOCAL4);
syslog(LOG_INFO, "START OF DEBUG LOG.");
}
/***** connect to database using db.ini for credentials *****/
try {
$dbConn = new PDO('mysql:host='.$host.';dbname='.$db, $dbUser, $dbPass, array (PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION));
} catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "<br/>";
die();
}
$structure_name = "'Wind'";
$cug_uid = "'R2X'";
$num_weeks = 10;
/**** Query - export file name ****/
$sqlQuery4filename = ("
call sp_CDRbyCustomer($structure_name, $cug_uid, DATE(DATE_SUB(NOW(), INTERVAL $num_weeks WEEK)), DATE(NOW()))
");
$sqlQuery4filename = preg_replace( "/\r|\n/", "", $sqlQuery4filename );
debug("01: sqlQueryfile string is '" . $sqlQuery4filename . "'");
$stmnt = $dbConn->prepare($sqlQuery4filename);
debug($stmnt);
$stmnt->execute();
$stmnt->closeCursor();
$filename = $stmnt->fetch(PDO::FETCH_ASSOC);
$filename = $filename['Exported filename'];
debug("01: filename string is '" . $filename . "'");
function debug($debug) {
if(!DEBUG) return;
print '
<div class="debug">
';
print_r($debug);
print '
</div><!-- end of debug -->
';
}
但是我只返回一个空字符串。
我有过这个工作,但是在颠覆它之后我得到了错误的版本并且无法再让它工作,任何人都给我任何关于我做错了什么的线索。
最佳答案
你需要正确调试这个:
- 查看您执行的确切 SQL 命令是什么(我无法从您的问题中判断)。
- 针对数据库测试命令,例如使用 PHPmyAdmin。
- 显示
fetch()
结果是什么,然后再将其作为数组访问。
如果您从头到尾跟踪 PHP 执行试验,您应该能够找出哪里出了问题。
关于尽管准备好的语句是正确的,但 php pdo 查询无法返回结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25806800/