-1
php和sql新手。我不得不在Netbeans上運行本地數據庫(使用db瀏覽器創建)。爲什麼我的SQL查詢不改變我的數據庫?
我的數據庫連接正常,返回結果。但是當我通過界面編輯/更改結果時,它沒有任何影響。我錯過了什麼嗎?
這是我插入一個新的入口代碼:
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
$pdo = new PDO('sqlite:events.db');
if (isset($_POST['submit'])) {
try {
$sql = "INSERT INTO events (type, name) VALUES (:eventsType, :eventsName)";
//named paramaters
$stmt = $pdo->prepare($sql);
$eventstype = filter_input(INPUT_POST, 'eventstype');
$stmt->bindValue(':eventstype', $eventstype, PDO::PARAM_STR);
$eventsName = filter_input(INPUT_POST, 'eventsName');
$stmt->bindValue(':eventsName', $eventsName, PDO::PARAM_STR);
//$movieRating = filter_input(INPUT_POST, 'movieRating');
//$stmt->bindValue(':movieRating', $movieRating, PDO::PARAM_INT);
$stmt->execute();
$pdo = null;
echo "<h1>Event added to database.</h1>";
echo '<a href="index.php">Return to main menu</a>';
} catch (PDOException $e) {
//for development
print "We had an error: " . $e->getMessage() . "<br/>";
die();
}
?>
<?php } else { ?>
<form action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>" method="post">
Type: <input type="text" name="eventsType"><br>
Name: <input type="text" name="eventsName"><br>
//Rating: <input type="text" name="movieRating"><br>
<input type="submit" name="submit">
</form>
<?php } ?>
這是一種更新條目:
<?php
$pdo = new PDO('sqlite:events.db');
if (isset($_POST['submit'])) {
try {
$sql = "UPDATE events SET type = :eventsType, name =:eventsName WHERE id=:movieId";
//named paramaters
$stmt = $pdo->prepare($sql);
$eventsId = filter_input(INPUT_POST, 'eventsId');
$stmt->bindValue(':eventsId', $eventsId, PDO::PARAM_INT);
$eventsType = filter_input(INPUT_POST, 'eventsType');
$stmt->bindValue(':eventsType', $eventsType, PDO::PARAM_STR);
/*$movieDescription = filter_input(INPUT_POST, 'movieDescription');
$stmt->bindValue(':movieDescription', $movieDescription, PDO::PARAM_STR);*/
/*$movieRating = filter_input(INPUT_POST, 'movieRating');
$stmt->bindValue(':movieRating', $movieRating, PDO::PARAM_STR);*/
$stmt->execute();
$pdo = null;
echo "<h1>Done</h1>";
echo '<a href="index.php">Return to main menu</a>';
} catch (PDOException $e) {
print "We had an error: " . $e->getMessage() . "<br/>";
die();
}
?>
<?php } else {
try {
$sql = "SELECT * FROM events WHERE id=:eventsId LIMIT 1";
//named paramaters
$stmt = $pdo->prepare($sql);
$id = filter_input(INPUT_GET, 'id');
$stmt->bindValue(':eventsId', $id, PDO::PARAM_INT);
$stmt->execute();
$r = $stmt->fetch(PDO::FETCH_ASSOC);
$pdo = null;
if (!$r){
print "No events specified to update";
exit();
}
} catch (PDOException $e) {
print "We had an error: " . $e->getMessage() . "<br/>";
die();
}
?>
<form action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>" method="post">
EventID: <input type="text" readonly name="movieId" value="<?= htmlspecialchars($r['id']); ?>"><br>
Type: <input type="text" name="movieTitle" value="<?= htmlspecialchars($r['title'])?>"><br>
Name: <input type="text" name="movieDescription" value="<?= htmlspecialchars($r['description']); ?>"><br>
<input type="submit" name="submit" value="Update record" >
</form>
<?php } ?>
,這是刪除:
<?php
$pdo = new PDO('sqlite:events.db');
if (isset($_POST['submit'])) {
if (isset($_POST['confirm']) && $_POST['confirm'] == 'yes'){
try {
//better, but still need to do more checking for security
$sql = "DELETE from events WHERE id=:eventId";
//named paramaters
$stmt = $pdo->prepare($sql);
$eventsId = filter_input(INPUT_POST, 'eventsId');
$eventsId = filter_input(INPUT_POST, 'eventsId', FILTER_SANITIZE_NUMBER_INT);
$stmt->bindValue(':eventsId', $eventsId, PDO::PARAM_INT);
$stmt->execute();
$pdo = null;
echo '<h1>Film has been removed from database</h1>';
echo '<a href="index.php">Return to main menu</a>';
} catch (PDOException $e) {
print "We had an error: " . $e->getMessage() . "<br/>";
die();
}
} else {
echo 'You need confirm.';
}
?>
<?php } else {
try {
$sql = "SELECT * FROM events WHERE id=:eventsId LIMIT 1";
//named paramaters
$stmt = $pdo->prepare($sql);
$id = filter_input(INPUT_GET, 'id');
$stmt->bindValue(':eventsId', $id, PDO::PARAM_INT);
$stmt->execute();
$r = $stmt->fetch(PDO::FETCH_ASSOC);
$pdo = null;
if (!$r){
print "No film specified to update";
exit();
}
} catch (PDOException $e) {
print "We had an error: " . $e->getMessage() . "<br/>";
die();
}
?>
Title:<?= htmlspecialchars($r['type'])?> <br>
Desc:<?= htmlspecialchars($r['name']); ?> <br>
Year:<?= htmlspecialchars($r['rating']); ?> <br>
<form action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>" method="post">
<input type="text" readonly name="eventsId" value="<?= htmlspecialchars($r['id']); ?>"><br>
<input type="checkbox" name="confirm" value="yes">Yes, delete this record<br>
<input type="submit" name="submit" value="Delete record">
</form>
<?php } ?>
我有不知道爲什麼它不工作。這是uni給我們的一個例子,並告訴我們要改變。我的表中的行是id,類型,名稱和說明。
任何幫助非常感謝,因爲我真的不知道發生了什麼事!
但是你註釋掉了movie_id參數!?! – Strawberry
不檢查錯誤?愚蠢的教授技巧。 –
更新應該拋出一個錯誤...有三個綁定佔位符,但只有兩個有價值的提供。 DELETE也應該拋出一個錯誤。對bindValue的調用引用了SQL語句中不存在的綁定佔位符「:eventsId」。 (SQL語句中的佔位符名稱不同。)如果我們要從PDO中捕獲異常,則需要使用PDO :: ATTR_ERRORMODE啓用PDO異常。 (這個任務只是部分讓代碼運行,其中最重要的是學習調試程序所需的技能。) – spencer7593