Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/241.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
postgresql混合大小写表名的PHP语法_Php_Postgresql - Fatal编程技术网

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));