我有一个小问题需要帮助解决。 这更多的是我缺乏 MySQL 知识,而不是真正的问题......
我有一张员工表,如下所示:
CREATE TABLE employes (CoNo int, EmplCode int, Name varchar(250), Dep varchar(4))
它包含一些数据,如下所示:
3 123 'John Jackson' 'INFO'
3 124 'Simon Says' 'SELL'
...
我正在尝试使用 PHP PDO 更新 Simons 行(类似):
$sql = "UPDATE employes SET CoNo = 3, Name = 'Simon Says', Dep = 'SELL' WHERE EmplCode = 124";
$stmt = $PDOObject->prepare($sql);
$status = $stmt->execute();
echo $stmt->rowCount();
现在可以说一切都已连接且一切正常。 如果您在 MySQL 类(class)中注意的话,您很快就会发现这将回显 0 行受影响。
这显然是 MySQL 的正常行为,因为 UPDATE 没有对表中的实际数据进行任何更改。
但是我需要的是一个像 rowCount() 这样的函数,它会给我找到的行而不是受影响的行,或者让我强制更新 MySQL 表的东西。
我已经查看并用谷歌搜索了这个东西,但我找不到任何东西,我担心它可能是因为它不存在。
我听说过名为 FLAG_FOUND_ROWS
的东西,但我不确定它是 PDO 标志或如何使用它(而且我在上面找不到任何内容)。
我希望通过此实现类似于 REPLACE 语句或 UPSERT 的功能,而无需主键。
如果 UPDATE 返回 0 行,则插入表中的行。
编辑
抱歉,我忘记了查询中的 WHERE 子句。正如评论中所指出的。
编辑
我仍在谷歌上对此进行研究,并发现了一个名为 FOUND_ROWS()
的 MySQL 函数,但似乎它需要在单独的查询中使用,这并没有真正的帮助,因为我可以事先进行选择。但这可能会给你们一个我还没有想到的想法。
感谢大家(和女孩)的帮助。
最佳答案
看来PDO::MYSQL_ATTR_FOUND_ROWS是一个mysql连接选项。 它也只能作为 PDO 连接选项,例如
$PDOObject = new PDO($dsn,DB_USER,DB_PASS, array(PDO::MYSQL_ATTR_FOUND_ROWS => TRUE));
此后,rowCount
返回找到的行数,不受影响。
echo $stmt->rowCount();
关于PHP PDO 查找 UPDATE 的已找到行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23961845/