为了账号安全,请及时绑定邮箱和手机立即绑定

Postgresql:如何使用可以是字符串或日期的变量编写 WHERE 子句

Postgresql:如何使用可以是字符串或日期的变量编写 WHERE 子句

PHP
LEATH 2021-11-13 17:31:24
我想编写一个 postgreSQL 脚本,它允许根据一个人是在表单中输入他的姓名(字符串)还是出生日期(日期)来在数据库中查找患者。单独带有姓名或单独出生日期的脚本可以正常工作,但是当与 OR 条件结合使用时,它适用于日期而不适用于字符串:当您使用名称搜索时,该条目对于日期类型被视为无效。<form method="GET"><p>Name or Date of Bith: <input name=saisie><br><input type=submit value="Find"><br></p></form><?php $c=pg_connect("dbname=dbname user=user");if (isset($_GET["saisie"])) :    $saisie=$_GET["saisie"];    $reponse=pg_query($c,"SELECT patient_id,name,firstname,dob FROM patient WHERE name like '$saisie%' OR dob='$saisie' ORDER BY name");[blablabla....]?>我很惊讶,因为 OR 条件应该允许搜索两个字段中的一个或另一个:即使字符串对于字段“dob”(日期)无效,它也应该适合字段“name”(字符串) 并且应该相应地启动搜索,而不是返回“日期类型的无效语法”错误......不用说我是 postgreSQL(或任何语言,真的)的初学者,我迷路了,任何提示都会不胜感激 !
查看完整描述

1 回答

?
智慧大石

TA贡献1946条经验 获得超3个赞

您的查询容易受到 SQL 注入的影响,并且由于OR.

但是要摆脱错误消息,您可以text在比较之前简单地将日期转换为:

... OR CAST(dob AS text) = '$saisie'


查看完整回答
反对 回复 2021-11-13
  • 1 回答
  • 0 关注
  • 134 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信