【问题标题】:Insert into table values with if condition with $_Post variable使用带有 $_Post 变量的 if 条件插入表值
【发布时间】:2018-11-08 15:00:03
【问题描述】:

我正在尝试在 PHP 环境下对“插入表值”语句使用 if 语句,并使用 $_post[] 作为变量来为字段更新进行复杂的 SQL 查询。脚本在下面。它主要是关于将带有NULL的字段更新为空字符串。似乎不适合我。有人可以帮帮我吗?

$strSQL = "INSERT INTO SR ";  
$strSQL .="(DESC,ATTACH) ";  
$strSQL .="VALUES ";  
$strSQL .="('".$_POST["txtDesc"]."','".((SELECT $_POST["txtAttach"] FROM SR WHERE $_POST["txtAttach"] is NULL),"  ")."')";  

【问题讨论】:

  • 您收到什么错误?目前尚不清楚您想要什么。你想把if放在哪里?请使用此信息和错误更新您的问题。
  • 错误在这里:解析错误:语法错误,C:\Program Files (x86)\Apache Software Foundation\Apache2.2\htdocs\submit\php_oracle_insert2 中的意外'$_POST' (T_VARIABLE) .php 在第 46 行
  • 请,无关的,但查找 PDO 和绑定参数。直接从用户输入生成 SQL 很危险。
  • 您的 select 语句似乎没有正确地作为字符串传递给您的 strSQL 变量...
  • @Sunnie 它会打开您对 SQL 注入的查询。例如,没有什么可以阻止用户发布<script type="text/javascript">function sendPersonalDataToMaliciousServier() { }</script>,那么当它保存到您的数据库时,每当检索到记录并在浏览器中运行时,javascript 也会运行。这是我可以在评论中写的最基本的例子。见:stackoverflow.com/questions/60174/…

标签: php html sql oracle


【解决方案1】:

这里的问题在于你的语法。

<?php
$strSQL = "INSERT INTO SR ";  
$strSQL .="(DESC,ATTACH) ";  
$strSQL .="VALUES ";  
$strSQL .="('".$_POST["txtDesc"]."','".((SELECT $_POST["txtAttach"] FROM SR WHERE $_POST["txtAttach"] is NULL),"  ")."')";

应该是:

$strSQL = "INSERT INTO SR ";  
$strSQL .="(DESC,ATTACH) ";  
$strSQL .="VALUES ";  
$strSQL .= "('".
    $_POST["txtDesc"] ."','" .
    "(
        (
            SELECT " . $_POST["txtAttach"] . 
            " FROM SR WHERE " .  
            $_POST["txtAttach"] . 
            " is NULL
        )
    )
)";

您的代码非常不可读。我会在我重写后对我的帖子进行编辑。

【讨论】:

  • 这么多双引号标志,为什么不分配变量让你的生活更轻松
  • 使用 PHP 的 NOWDOC 语法肯定会使 SQL 更易于阅读:blogs.oracle.com/opal/…
  • @ChristopherJones 这是偏好,我强烈反对。
猜你喜欢
  • 1970-01-01
  • 2020-11-23
  • 1970-01-01
  • 1970-01-01
  • 2022-07-08
  • 1970-01-01
  • 1970-01-01
  • 2020-11-02
  • 2013-07-14
相关资源
最近更新 更多