我在MySQL中直接选择直接选择或在PHP中使用mysqli,它们按预期工作:
MySQL查询:
SELECT * FROM `publn_data` WHERE publn_auth = 'EP' AND publn_nr = 2007
SELECT * FROM `publn_data` WHERE publn_auth = 'EP' AND publn_nr = 0002007
并且都给了我预期的结果:
id | publn_auth | publn_nr | author |
09 | EP | 0002007 | J.Ferri |
这里的PHP查询:
$query = "
SELECT id, publn_auth, publn_nr, author
FROM publn_data
WHERE publn_auth = '$publnAuth'
AND publn_nr = $publnNr";
$result = mysqli_query($mysqli, $query);
while($row = mysqli_fetch_array($result)){
echo $row['id'].', '.$row['publn_auth'].', '.$row['publn_nr'].', '.$row['author'];
}
这张印刷在屏幕上:09,EP,0002007,J.Ferri。如果变量$ publnNr = 2007或0002007,则没问题。
但是当我使用PDO时它只能在我写完全$ publnNr = 0002007时起作用。当我只写2007时,我没有收到结果(也没有错误)。
这里使用PDO的代码:
$sql = '
SELECT id, publn_auth, publn_nr, author
FROM publn_data
WHERE publn_auth = :auth AND
publn_nr = :nr';
$q = $conn->prepare($sql);
$q->execute(array(':auth' => $publnAuth,
':nr' => $publnNr));
while($r = $q->fetch(PDO::FETCH_ASSOC)){
echo $r['id'].', '.$r['publn_auth'].', '.$r['publn_nr'].', '.$r['author'];
}
感谢您解决此问题的任何帮助。
===编辑===
这里有一些额外的细节,来自fred-ii的评论 -
我从发送$ _POST [' publn-in']的表单中获取$ publnAuth和$ publnNr。 在现场,用户通常会写EP0002007或EP2007。 最后,我做了以下事情(有一些解决方法,但我认为这不符合这里的要求):
$publnIn = $_POST['publn-in'];
$publnAuth = substr("$publnIn", 0, 2);
$publnNr = substr("$publnIn", 2);
根据用户的插入情况,它给我们$ publnAuth = EP和$ publnNr = 0002007或2007。
此外,我们在表publn_auth:EP和publn_nr:0002007的列中。
publn_auth char(2)和 publn_nr varchar(15)。
==编辑II ==
基于Sebas'评论: 这是我们在"描述publn_data":
之后的信息Field Type Null Key Default Extra
id int(10) YES MUL NULL
publn_auth char(2) YES MUL NULL
publn_nr varchar(15) YES MUL NULL
author varchar(64) YES MUL NULL
答案 0 :(得分:1)
在您的MYSQL查询和PHP代码中,您为MYSQL提供一个整数值而不是字符串,以便与publn_nr(这是一个varchar)进行比较。我假设MYSQL隐式地将publ_nr转换为整数然后和(int)2007 ==(int)0002007。
当你使用PDO时,你给它一个字符串,然后比较两个字符串和' 2007' !=' 0002007'。
3种可能的解决方案(您可以选择一种):