gpt4 book ai didi

PHP/MySQL/PDO - 结果为假但没有数据库错误消息?

转载 作者:可可西里 更新时间:2023-11-01 08:00:12 25 4
gpt4 key购买 nike

我有一段代码运行异常。有时有效,有时无效。该服务器有一个绝对古老的 PHP 副本(5.1.6,已有五年历史,但带有由 Red Hat 手动向后移植的安全补丁)。

这是代码,包括我目前在其中的调试行:

<?php
// Includes json_print, which does a json_encode, an
// appropriate content-type header, prints it, and exits the script.
include_once('json-functions.php');

$uid = $_POST['uid'];

$salted = false;

if(isset($_POST['salted'])){ $salted = true; }

// No uid given.
if(is_null($uid) || $uid === ''){
$details = array(
'error' => 1,
'errorMessage' => 'No unique ID entered. Please try again.',
);
json_print($details);
}

// Validate uid. Must be 64 digit hexadecimal value.
$pattern = '/^[a-f0-9]{64}$/i';
if(preg_match($pattern, $uid) === 0){
$details = array(
'error' => 2,
'errorMessage' => 'Invalid unique ID.',
);
json_print($details);
}


include_once('../db.php');

header('Content-Type: text/plain');

// Is this salted already?
var_dump($salted);

// What's the UID?
var_dump($uid);

if(!$salted){ $uid = hash('sha256', $salt.$uid); }

// Was the UID salted? (shouldn't be double-salted)
var_dump($uid);

// The query
$SQL = 'SELECT ';

$SQL .= 'p.patronID AS patronID, ';
$SQL .= 'uniqueID, ';
$SQL .= 'status, ';
$SQL .= 'active, ';
$SQL .= 'd.name AS department, ';
$SQL .= 'docdelivery, ';
$SQL .= 'terms, ';
$SQL .= 'copyright, ';
$SQL .= 'lastLogin, ';
$SQL .= 'updated, ';
$SQL .= 'TIMESTAMPDIFF(MINUTE, lastLogin, NOW()) AS recency, ';
$SQL .= 'DATEDIFF(NOW(), updated) AS stale, ';

$SQL .= 'AES_DECRYPT(first, ?) AS first, ';
$SQL .= 'AES_DECRYPT(last, ?) AS last, ';
$SQL .= 'AES_DECRYPT(barcode, ?) AS barcode, ';
$SQL .= 'INET_NTOA(AES_DECRYPT(ip, ?)) AS ip, ';
$SQL .= 'AES_DECRYPT(email, ?) AS email, ';
$SQL .= 'AES_DECRYPT(phone, ?) AS phone, ';
$SQL .= 'AES_DECRYPT(address1, ?) AS address1, ';
$SQL .= 'AES_DECRYPT(address2, ?) AS address2, ';
$SQL .= 'AES_DECRYPT(city, ?) AS city, ';
$SQL .= 'AES_DECRYPT(state, ?) AS state, ';
$SQL .= 'AES_DECRYPT(zip, ?) AS zip ';

$SQL .= 'FROM patrons p, departments d ';
$SQL .= 'WHERE department = d.deptID ';
$SQL .= 'AND uniqueID = ?';

$query = $DB->prepare($SQL);

$p = array(
$key,
$key,
$key,
$key,
$key,
$key,
$key,
$key,
$key,
$key,
$key,
$uid,
);

$query->execute($p);

$result = $query->fetch();

// dump the results
var_dump($result);
print "\n\n";

// And any error info
var_dump($DB->errorInfo());
exit;

这是正常工作时的示例输出:

// Salted is true
bool(true)

// UID is:
string(64) "52223d99e1db275716028cf6fd4f58895b1df7eb8e061cefab346b8ce3cf4ff4"

// It was not double-salted:
string(64) "52223d99e1db275716028cf6fd4f58895b1df7eb8e061cefab346b8ce3cf4ff4"

// Results were:
array(46) {
["patronID"]=>
string(1) "126"
[0]=>
string(1) "126"
["uniqueID"]=>
string(64) "52223d99e1db275716028cf6fd4f58895b1df7eb8e061cefab346b8ce3cf4ff4"
[1]=>
string(64) "52223d99e1db275716028cf6fd4f58895b1df7eb8e061cefab346b8ce3cf4ff4"
["status"]=>
string(1) "4"
[2]=>
string(1) "4"
["active"]=>
string(1) "1"
[3]=>
string(1) "1"

*** snip! ***

[21]=>
string(2) "TX"
["zip"]=>
string(5) "78623"
[22]=>
string(5) "78623"
}

// Errors reported?
array(1) {
[0]=>
string(5) "00000"
}

这是失败时的示例输出:

 // Salted is true
bool(true)

// UID is:
string(64) "1d6fa3b897b07301a836f5441d23f60e7cb4b52a00ee6d20648fe51b01c769bf"

// It was not double salted
string(64) "1d6fa3b897b07301a836f5441d23f60e7cb4b52a00ee6d20648fe51b01c769bf"

// Results were:
bool(false)

// Error code was:
array(1) {
[0]=>
string(5) "00000"
}

我不明白为什么它对某些 uid 有效,但对其他 uid 无效。另外,在第二个示例中,结果集出现 FALSE,但数据库报告错误 00000,这意味着“没有错误”。我已经检查过是否正确准备了查询,在这两种情况下都是正确的。

我在这里错过了什么?

最佳答案

尝试直接在数据库上运行查询并检查是否正常。

关于PHP/MySQL/PDO - 结果为假但没有数据库错误消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6391076/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com