我正在为一个类创建一个简单的小项目 - 一个模拟数据库(使用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语句?非常感谢来自这个美好社区的任何见解。
答案 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)
;
。您不在互动会话中这里提出了如何做到这一点的建议。
$query = "UPDATE adjunct_number SET FIRSTNAME = ? WHERE 700NUMBER = ?";
$sth = $db->prepare($query);
$sth->execute( array( $updateInformation, $updateCriteria ) );