查询在MySQL中直接运行或在PHP中使用mysqli,但在PDO中不起作用
我在MySQL中直接执行以下选择,或者在PHP中使用mysqli,它们的工作与预期一样: MySQL查询:查询在MySQL中直接运行或在PHP中使用mysqli,但在PDO中不起作用,php,mysql,pdo,mysqli,Php,Mysql,Pdo,Mysqli,我在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
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'];
}
如果能帮我解决这个问题,我将不胜感激
==编辑===
以下是弗雷德二世评论中提出的一些额外细节-
我从发送$\u POST['publn-in']的表单中获得$publnAuth和$publnNr。
用户通常在字段中写入EP0002007或EP2007。
最后,我做了以下工作(有一些工作要做,但我认为这并不重要):
它根据用户插入的内容相应地给出$publnAuth=EP和$publnNr=0002007或2007
此外,我们在表publn_auth:EP和publn_nr:0002007的列中有
publn_auth char(2)和
第15页
==编辑II==
根据Sebas的评论:
这是我们在“描述公共数据”之后得到的信息:
在MYSQL查询和PHP代码中,您给MYSQL一个整数值,而不是字符串,以与publn_nr(varchar)进行比较。我假设MYSQL隐式地将publ_nr转换为整数,然后(int)2007==(int)0002007 使用PDO时,给它一个字符串,然后在中比较两个字符串和'2007'!='0002007’ 3种可能的解决方案(您可以选择一种):
两者都给了我预期的结果
我不相信你,或者至少不相信这个结果。对于我的下一个魔术,我需要一个描述publn_数据
请。您好@fred ii-谢谢您的评论。我在上面的问题中添加了一些额外的信息,并更正了alpha问题。你说得对:应该是EP。你好@Sebas,你说的“需要描述公共数据”是什么意思?你是说描述吗?对不起,我英语不流利。请运行命令descripe publn\u data在mysql中编码>并给出结果。您好@Sebas,谢谢您的帮助。我刚刚用Descripte publn_data的结果编辑了这个问题。亲爱的@thorsten,谢谢你的回答!对我来说,只有选择3是可能的。但是,您能告诉我如何在PDO语句中将publn_nr转换为整数吗?类似于这样:WHERE cast(publ_nr为UNSIGNED)=:nr请注意,此列可以包含字符串。因此,根据DB,“XYZ”是一个非常好的公共资源。如果你把它转换成int,你会得到一个0。
$publnIn = $_POST['publn-in'];
$publnAuth = substr("$publnIn", 0, 2);
$publnNr = substr("$publnIn", 2);
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