postgresql混合大小写表名的PHP语法
我有一个代码如下:postgresql混合大小写表名的PHP语法,php,postgresql,Php,Postgresql,我有一个代码如下: <?php require "institution.php" /* in this portion, query for database connection is executed, and */ $institution= $_POST['institutionname']; $sCampID = 'SELECT ins_id FROM institution where ins_name= '$institution' '; $qcampID = pg
<?php
require "institution.php"
/* in this portion, query for database connection is executed, and */
$institution= $_POST['institutionname'];
$sCampID = 'SELECT ins_id FROM institution where ins_name= '$institution' ';
$qcampID = pg_query($sCampID) or die("Error in query: $query." . pg_last_error($connection));
/* this portion outputs the ins_id */
?>
该机构必须双重报价。查询返回了解析错误。
当我删除此部分时:其中ins_name='$institution',没有发生错误
我的问题是如何解决这个问题,将包含混合大小写字母和存储在变量(本例中为institution)中的值的表名合并到单个select语句中
非常感谢您的回答和建议 您可以改为使用双引号
$sCampID = "SELECT ins_id FROM \"Institution\" where ins_name= '$institution'";
字符串转义
正如另一位评论员所说,请阅读有关SQL注入的文章。我所拥有的不是注射安全性,考虑使用准备好的语句,最好是PDO。< /P> <代码>
以添加其他答案(引用表名,并使用准备好的语句来获得安全性和性能),请阅读。如果您有选择,您可以考虑更改DB架构,以便表名称(和列和标识符一般)都是小写的。这将简化您的查询(但要求您检查所有实际引用的查询并将其取消引用)。
如果$institution包含以下字符串,会发生什么情况:'或1=1--<?php
require "institution.php"
/* in this portion, query for database connection is executed, and */
$institution= pg_escape_string($_POST['institutionname']);
$sQuery = "SELECT ins_id FROM \"Institution\" where ins_name= '$institution'";
$qcampID = pg_query($sQuery)
or trigger_error("Error in query: $sQuery." . pg_last_error($connection));
/* this portion outputs the ins_id */
?>
这就是我们所说的SQL注入攻击,对于黑客来说,这是一种非常简单的方法来窃取您的数据,并让您与客户陷入大麻烦
在将该字符串放入SQL查询之前,需要使用pg_escape_string()对其进行转义。我喜欢使用sprintf()构建我的查询:
$sql = sprintf("SELECT ins_id FROM \"Institution\" where ins_name= '%s'", pg_escape_string($conn, $institution));
在上面的示例中,$conn是连接标识符,它是通过调用pg_connect()创建的。我建议您先阅读,它也可能解决您的问题。好的,非常感谢您。。我得到了它。
<?php
require "institution.php"
/* in this portion, query for database connection is executed, and */
$institution= pg_escape_string($_POST['institutionname']);
$sQuery = "SELECT ins_id FROM \"Institution\" where ins_name= '$institution'";
$qcampID = pg_query($sQuery)
or trigger_error("Error in query: $sQuery." . pg_last_error($connection));
/* this portion outputs the ins_id */
?>
$sql = sprintf("SELECT ins_id FROM \"Institution\" where ins_name= '%s'", pg_escape_string($conn, $institution));