【发布时间】:2018-06-28 08:51:59
【问题描述】:
我有一个带有 VARBINARY 257 的 MySQL 表来存储加密密码。我必须定期更新记录。在进行 REPLACE INTO 之前,我想使用我拥有的所有值创建一个 SELECT。如果我找到记录,则不需要 REPLACE。这是因为我有一个带有“on update CURRENT_TIMESTAMP”属性的时间戳列来存储上次修改时间。它在没有密码的情况下运行良好,但即使所有值都相同,SELECT 也不起作用。如果我在 phpmyadmin 上使用相同的 SELECT,它可以工作。我有一个函数可以读取我尝试过 mysqli 函数和 PDO 类的记录:
mysqli:
function getMySQL($query, $pwd) {
$link = mysqli_connect("localhost", "decisionrule", $pwd, "gateways");
if (mysqli_connect_errno())
return array(array('Connection error : '.mysqli_connect_error()));
$result = mysqli_query($link, $query);
$res = array();
for ($i=0; $row = mysqli_fetch_array($result, MYSQLI_ASSOC); $i++)
$res[$i] = $row;
mysqli_free_result($result);
mysqli_close($link);
return $res;
}
PDO:
function getMySQL($query, $pwd) {
try {
$bdd = new PDO('mysql:host=localhost;dbname=gateways', "decisionrule", $pwd);
}
catch(Exception $e) {
die('Erreur : '.$e->getMessage()."\n");
}
$res = array();
$response = $bdd->query($query);
while ($donnees = $response->fetch())
$res[] = $donnees;
$response->closeCursor();
return $res;
}
为我的问题返回一个空数组。
SELECT 示例:
SELECT name FROM partenaires WHERE gateway='GTWEIR01' AND name='ACCOLADE' AND proto_ident='ACCOLADE' AND protocol='SFTP' AND comments='ACCOLADE - SA0000026603841' AND login_ident='cofidisacco' AND login_password=0x014f4593f6e4360b4c4905da27e3a912e9e8f641ca96557ef1a7e7c10f44273d56c661107d1983d47a9f822e2e419c295b791dd4aed54fe57a4bcd44130f475c4673ec14d044ce208e84bd6a447161874746567e5446388883bbe3a3b8ddb75155488e8290fc5850cfcd776edf9994819e85d1fcec8b4ba3e02c2081a440172b AND dest_address='90.83.11.173/22' AND org_address='' AND dest_address_1='41.87.153.85/22' AND org_address_1='' AND dest_address_2='' AND org_address_2='' AND dest_address_3='' AND org_address_3=''
SELECT 的大小限制是否可以更改,因为它适用于 phpmyadmin ?
版本:
RedHat 6
PHP 5.3.3
Apache 2.2.15
MySQL 5.1.73
谢谢
【问题讨论】:
-
好吧,如果您在触发查询后添加了一些错误处理,那么您也许会知道出了什么问题,并且不会陷入这样的困境。
-
在引号中输入 login_password ' '
-
@Shadow 我已经尝试使用 mysqli 并测试了 $result。这绝不是假的。
-
@Leet 我试过用引号。这并没有更好,也没有解释为什么它可以与 phpmyadmin 一起使用。
-
max_allowed_packet 设置为 1MB 所以看起来这不是查询大小限制问题