php - 如果没有什么不同,更新不起作用
问题描述
如果我不更改至少 1 个字段值,则更新失败。
插入工作正常。
我的 git https://github.com/emerson-cs-santos/TSI-PI_2-2019/blob/master/PHP/novo_user.php
如果我继续这样做: $status = $status 。' '; 有效,但听起来我是正确的解决方案
-- MYSQL --
CREATE DATABASE IF NOT EXISTS SENAC_PI;
USE SENAC_PI;
CREATE TABLE IF NOT EXISTS USUARIOS
(
codigo INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY
,nome VARCHAR(20) NOT NULL
,senha VARCHAR(200) NOT NULL
,tipo VARCHAR(20) NOT NULL
)
;
-- PHP --
<?php
// Open a Connection to MySQL
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "SENAC_PI";
// Create connection
$conn = new mysqli($servername, $username, $password,$dbname);
// Check connection
if ($conn->connect_error)
{
die("Connection failed: " . $conn->connect_error);
echo 'errado';
return;
}
$query = 'use SENAC_PI';
$result = $conn->query($query);
$codigo = 0;
$login = 'teste';
$senha = '123';
$status = 'Ativo';
$query =
" INSERT INTO USUARIOS ( codigo, nome, senha, tipo ) Values (?, ?, ?, ?)";
$querytratada = $conn->prepare($query);
$querytratada->bind_param("isss",$codigo,$login,$senha,$status);
$querytratada->execute();
if ($querytratada->affected_rows > 0)
{
$resposta = 'ok';
}
else
{
$resposta = 'erro';
}
-- update
$query =
" UPDATE USUARIOS SET nome = ? ,senha = ? , tipo = ? where codigo = ? ";
$querytratada = $conn->prepare($query);
$querytratada->bind_param("sssi",$login,$senha,$status,$codigo);
$querytratada->execute();
if ($querytratada->affected_rows > 0)
{
$resposta = 'ok';
}
else
{
$resposta = 'erro';
}
}
?>
如果我不更改至少 1 个字段值,则查询返回:affected_rows = 0
解决方案
感谢Nigel,我设法验证了结果。
我使用“affected_rows”来验证错误,但如果用户没有更改某些内容,我的代码将作为错误返回。
使用“匹配的行”和“警告”,我可以确保我的查询没有错误。
我的问题的最终代码: preg_match_all ('/(\S[^:]+): (\d+)/', $conn->info, $querytratada); $info = array_combine ($querytratada[1], $querytratada[2]);
// Linhas encontradas com base na condição da where
$linhas_encontradas = $info['Rows matched'];
// Linhas que foram alteradas, quando os dados não forem alterados, mesmo o comando estando certo, não é retornado linhas afetadas
$linhas_afetadas = $info['Changed'];
// Avisos de problemas
$avisos_problemas = $info['Warnings'];
//if ($querytratada->affected_rows > 0)
if ($linhas_encontradas == '1' and $avisos_problemas == '0')
{
$resposta = 'ok';
}
else
{
$resposta = 'erro';
}
无论如何,再次感谢奈杰尔!
推荐阅读
- java - 如何修复指定为非空的参数是Android中的空错误
- sdl - 如何安装 SDL lib 并将其交叉编译到嵌入式 linux (hisiv300)
- perforce - 如何在 Perforce 流中包含一个被忽略的文件夹结构中的特定文件?
- c# - 如果在设计期间启用 = false,则灰色 UserControl 输出
- java - 保持最大精度水平
- avfoundation - AVAudioRecorder:加快录音的播放速度?(不能用 AVAudioPlayer 快速播放)
- android - 未收到有关 Moto E4 plus 的通知
- python-3.x - 如何修复从.csv加载的经纬度并正确上路?
- python - 为什么学习率不变?
- c# - 如何使用 Unity 在画布中显示分数?