PHP PDO 查找 UPDATE 的已找到行

标签 php mysql pdo

我有一个小问题需要帮助解决。 这更多的是我缺乏 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/

相关文章:

php - "invalid data source name"与 PDO MySQL

php - PDO select 语句中的特殊字符

mysql - 查询三个连接非常慢

php - session 变量不改变它的值

php - 优化 innoDB 但我的插入等待彼此

mySQL - 放入列的正确方法(UNION 或其他?)

mysql - 常见的 MySQL 字段及其适当的数据类型

php - 根据数据库中下拉列表的值自动完成

php - 我如何制作像 Facebook 这样的照片库?

php - 在使用 Paginator 的查询中组合聚合字段(group by)和排序(order by)时,Doctrine 会生成不正确的 SQL