基本SQL Update语句在PHP

时间:2015-11-25 19:11:41

标签: php sql pdo

我正在为一个类创建一个简单的小项目 - 一个模拟数据库(使用phpMyAdmin构建),附带一个用于用户输入的Web应用程序,以允许搜索/附加/更新所述数据库。搜索和追加工作完美,但更新让我感到悲伤。

我将错误消息设置为显示以帮助调试过程,虽然他们已经弹出了此项目中的先前问题,但他们还没有出现这个特定问题。

我的代码如下所示:

$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 ARE实际上是使用这个语句成功捕获的:

echo $updateInformation . ", " . $updateCriteria

产生以下输出:

Drew, 700123456

我将在phpMyAdmin中输入以下查询以先测试它。

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

它总是在phpMyAdmin中运行,正如预期的那样,100%的时间......但是,当我通过PHP发送它时,完全相同的更新命令永远不会起作用,这让我非常困惑。我能想到的唯一一件事就是在我的SQl声明中忽略了PHP拼写错误,但此时我已经盯着它看了很长时间以至于我可以用一双新鲜的眼睛!为什么当我尝试回显$ sth时,没有显示sql语句?非常感谢来自这个美好社区的任何见解。

4 个答案:

答案 0 :(得分:3)

您需要学习基本的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 . "';";

答案 1 :(得分:1)

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

{{1}}

答案 2 :(得分:1)

可以尝试使用符号(“`”)反引号用于列名和表格

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

答案 3 :(得分:1)

  • 您的查询中不需要;。您不在互动会话中
  • 您需要进行SQL注入。
  • 无需引用参数化查询。

这里提出了如何做到这一点的建议。

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