基本SQL更新语句在PHP中不起作用


Basic SQL Update statement not working in PHP

我正在为一个类做一个简单的小项目——一个模拟数据库(使用phpMyAdmin构建),附带一个用于用户输入的web应用程序,以允许搜索/附加/更新所述数据库。搜索和Appending运行得很好,但更新让我很难过。

我设置了错误消息来显示,以帮助调试过程,尽管它们已针对该项目中以前的问题弹出,但尚未针对该特定问题显示。

我的代码如下:

$sth = "UPDATE adjunct_number
        SET FIRSTNAME = '.$updateInformation.'
        WHERE 700NUMBER = '.$updateCriteria.';";
(I tried echoing $sth right here, nothing displayed!)
$sth = $db->prepare($sth);
$sth->execute();

$updateInformation和$updateCriteria都是从HTML表单的文本框中成功提取的。(我将在表单中输入Drew和700123456作为测试数据。)我测试了$updateInformation和$updateCriteria实际上是使用以下语句成功捕获的:

echo $updateInformation . ", " . $updateCriteria

产生以下输出:

Drew, 700123456

我将在phpMyAdmin中输入以下查询,以便首先对其进行测试。

UPDATE adjunct_number
SET FIRSTNAME = 'DREW'
WHERE 700NUMBER = 700482306

它总是在phpMyAdmin中工作,正如预期的那样,100%的时间。。。然而,当我通过PHP发送时,完全相同的更新命令永远不会起作用,这让我非常困惑。我唯一能想到的是我的SQl语句中一个被忽视的PHP拼写错误,但此时此刻,我已经盯着它看了很长时间,我可以用一双全新的眼睛了!为什么当我尝试回显$sth时,没有显示sql语句?如果能从这个优秀的社区获得任何见解,我们将不胜感激。

您需要学习基本的PHP字符串:

$sth = "UPDATE adjunct_number
       ^---start of PHP string
        SET FIRSTNAME = '.$updateInformation.'
        WHERE 700NUMBER = '.$updateCriteria.';";
                                              ^---end of PHP string

这意味着您的查询正在执行... SET FIRSTNAME = '.foo.' ....实际上嵌入在查询中。这意味着您的where子句将永远不会匹配任何记录。

由于您使用"作为报价,因此根本不需要使用.

$sth = "UPDATE adjunct_number
        SET FIRSTNAME = '$updateInformation'
        WHERE 700NUMBER = '$updateCriteria';";

或者您应该先正确退出字符串:

$sth = "UPDATE adjunct_number
        SET FIRSTNAME = '" . $updateInformation . "'
        WHERE 700NUMBER = '" . $updateCriteria . "';";
  • 您的查询中不需要;。您不在交互式会话中
  • 您要接受SQL注入
  • 不需要参数化查询的报价

这里有一个建议你可以怎么做。

$query = "UPDATE adjunct_number SET FIRSTNAME = ? WHERE 700NUMBER = ?";
$sth = $db->prepare($query);
$sth->execute( array( $updateInformation, $updateCriteria ) );

您有混合的单引号和双引号。将其更新为以下内容:

$sth = "UPDATE adjunct_number
    SET FIRSTNAME = ".$updateInformation."
    WHERE 700NUMBER = ".$updateCriteria.";

您可以尝试使用符号("`")来表示列名和表

UPDATE `adjunct_number`
SET `FIRSTNAME` = 'DREW'
WHERE `700NUMBER` = 700482306