PHP kullanarak bir MySQL tablosuna veri ekleme ve güncelleme hakkında bir öğretici okuyorum, kod aşağıda listelenmiştir. Sorunum, tıklamayı güncellediğimde ancak herhangi bir veriyi değiştirmediğimde, rowCount() 0 değerini döndürür ve kodu bozar.PDO rowCount(), varolan verileri değiştirmeden bir tabloyu UPDATE sonra 0'a neden dönüyor?
Sorum şu ki, veritabanını veritabanında aynı değerlerle güncelleştiriyorsam, rowCount() neden sıfır döndürüyor? Düşüncelerim, her ne kadar aynı veri olsa da, zaten eklenecek ve güncellenmiş satırların sayısını döndürecek miydi? Güncellemeyi denemeden önce verileri kontrol ettiğini tahmin ediyorum? Bu konuda bana biraz ışık tutabilir ve bir geçici çözüm önerebilir mi? Kodda saatlerce oynadım ve hiçbir şeyle gelemedim, teşekkürler. Sadece neden rowCount() sıfır çıkmıyor, veritabanında aynı değerlerle veritabanını güncelleyerek am mı
<?php
require_once('../includes/connection.inc.php');
// initialize flags
$OK = false;
$done = false;
// create database connection
$conn = dbConnect('write', 'pdo');
if (isset($_GET['article_id']) && !$_POST) {
// prepare sql query
$sql = 'SELECT article_id, title, article FROM blog WHERE article_id = ?';
$stmt = $conn->prepare($sql);
// bind the results
$stmt->bindColumn(1, $article_id);
$stmt->bindColumn(2, $title);
$stmt->bindColumn(3, $article);
// execute query by passing array of variables
$OK = $stmt->execute(array($_GET['article_id']));
$stmt->fetch();
}
// if form has been submitted, update record
if (isset($_POST['update'])) {
//prepare update query
$sql = 'UPDATE blog SET title = ?, article = ? WHERE article_id = ?';
$stmt = $conn->prepare($sql);
// execute query by passing array of variables
$stmt->execute(array($_POST['title'], $_POST['article'], $_POST['article_id']));
$done = $stmt->rowCount();
}
// redirect page on sucess or if $_GET['article_id'] not defined
if ($done || !isset($_GET['article_id'])) {
header('Location: http://localhost/PHP_Solutions/admin/blog_list_pdo.php');
exit();
}
// store error message if query fails
if (isset($stmt) && !$OK && !$done) {
$error = $stmt->errorInfo();
if (isset($error[2])) {
$error = $error[2];
}
}
?>
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Update Blog Entry</title>
<link href="../styles/admin.css" rel="stylesheet" type="text/css">
</head>
<body>
<h1>Update Blog Entry</h1>
<p><a href="blog_list_pdo.php">List all entries </a></p>
<?php if (isset($error[2])) {
echo "<p class='warning'>Error: $error[2]</p>";
echo '<pre>';
print_r($_POST);
print_r($error);
echo '</pre>';
}
if ($article_id == 0) { ?>
<p class="warning">Invalid request: record does not exist.</p>
<?php } else { ?>
<form id="form1" method="post" action="">
<input name="article_id" type="hidden" value="<?php echo $article_id; ?>">
<p>
<label for="title">Title:</label>
<input name="title" type="text" class="widebox" id="title" value="<?php echo htmlentities($title, ENT_COMPAT, 'utf-8'); ?>">
</p>
<p>
<label for="article">Article:</label>
<textarea name="article" cols="60" rows="8" class="widebox" id="article"><?php echo htmlentities($article, ENT_COMPAT, 'utf-8'); ?></textarea>
</p>
<p>
<input type="submit" name="update" value="Update Entry" id="update">
</p>
</form>
<?php } ?>
</body>
</html>
ama aynı verileri tekrar satırlara ekliyorum, veri var, sadece aynı veriler var. Farkı nasıl biliyor? Teşekkürler – Drewdin
Eklemiyorsunuz, güncelleniyorsunuz. Büyük bir fark var ve SQL sunucuları herhangi bir iş yapıp yapmadıklarını bilmek için yeterince akıllılar. Verileri art arda değiştirmezseniz, 'etkilenen' olarak kabul edilemez. – ceejayoz
Verilerin değiştirilmediğini kontrol etmenizi nasıl öneriyorsunuz? Teşekkürler – Drewdin