Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

mysql_num_rows () mong muốn tham số 1 là tài nguyên, boolean đã cho

Khi chuyển một truy vấn CẬP NHẬT, mysql_query() trả về boolean TRUE nếu thành công và FALSE nếu thất bại, trong khi mysql_num_rows() chỉ chấp nhận tài nguyên tập kết quả làm đối số của nó. Để xác định có bao nhiêu hàng mà truy vấn UPDATE bị ảnh hưởng, hãy gọi mysql_affected_rows() với tài nguyên kết nối làm đối số của nó.

Nó không gây ra sự cố mà bạn đang gặp phải ngay bây giờ, nhưng bạn được khuyên là nên nối thêm or die(mysql_error()) vào mysql_query() của bạn để bắt bất kỳ lỗi MySQL nào xảy ra. Bạn thậm chí nên bỏ mysql_* các chức năng hoàn toàn có lợi cho tiện ích mở rộng PHP PDO, như được khuyến nghị trong sổ tay hướng dẫn PHP và nó thực sự không phải chịu nhiều chi phí nhận thức hơn để đổi lấy những lợi ích to lớn mà nó mang lại về khả năng và bảo mật.

Bỏ điều đó sang một bên, đây là cách tôi sẽ thay đổi mã của bạn để nó hoạt động giống như những gì bạn nghĩ:

<?php
// obtain a database connection
$dbConn = mysql_connect($serverName, $user_name, $password) 
  or die("Cannot connect to server: " . mysql_error() . "<br />\n"); 
  // mysql error number rarely adds enough information to be worth including

// select the database
mysql_select_db($db_name, $dbConn) 
  or die("Couldn't select $db_name: " . mysql_error() . "<br />\n"); 

// obtain escaped versions of query data for inclusion in update query
// it is imperative to use mysql_real_escape_string() or equivalent if you're
// going to use mysql_* functions instead of the far preferable PDO 
// prepared statements; if you don't escape your data, you leave open the
// possibility of SQL injection, which someone will certainly soon use to
// screw up your website horribly
$id = mysql_real_escape_string($_GET['id']);
$additional_notes = mysql_real_escape_string($_GET['additional_notes']);

// assemble query to pass to mysql_query()
// no need for parentheses around the string; in fact i'm surprised that
// didn't result in a parse error
// also FYI re backticks, MySQL uses them to denote literal database/table/
// column names -- they're optional unless required to disambiguate between
// an entity name and a reserved word. for example, you can create a table
// containing a column named 'key', which is a MySQL reserved word, but you
// thereafter must refer to that column as `key`, with backticks, in any
// queries, to hint to MySQL's parser that you mean the column by that name
// and not the reserved word; otherwise, it's a parse error.
$sql = "UPDATE `rmstable2` SET `additional_notes` = '$additional_notes' WHERE `id` = '$id'";

// actually run the query
// this being an UPDATE query, the result is boolean and offers no 
// additional useful information, so you need not capture it in a variable; 
// the 'or die' clause will fire if it's false, and if it's true, you'll 
// use mysql_affected_rows() to get the additional info you need.
mysql_query($sql)
  or die(mysql_error());

// if the query failed, the script die()d on the previous line and didn't 
// get here; if it did get here, you know the query succeeded
$resultcount = mysql_affected_rows($dbConn);

// this is technically correct but semantically odd; since you already included
// the 'additional_notes' value in the previous UPDATE query, and since
// that query certainly succeeded if we're evaluating this code at all, 
// why run the same query again?
if ($resultcount == 1) {
  mysql_query("UPDATE `rmstable2` SET `additional_notes` = '$additional_notes' WHERE `id` = '$id'") 
    or die(mysql_error());
} 

// again, the 'or die' clauses mean that we can only have reached this point
// if the queries succeeded, so there's no need for an if() test here
echo "Update Successful!";
echo '<h3>Your case has been updated.</h3>'; 
// note the backslashes before the embedded double quotes; single quotes in
// tag attributes are technically invalid but most browsers will accept them,
// but you can use double quotes within a double-quoted string if you precede
// the embedded quotes with backslashes (called "escaping") to indicate that
// they're not to be taken as the end of the string
// (i.e., "\"\"" == '""')
echo "To see your changes please click <a href=\"/fullcase.php?id=$id\">here</a></b>";
?>


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách đúng để sử dụng LIKE '% {$ var}%' với các câu lệnh đã chuẩn bị? [mysqli]

  2. Tôi có thể nối nhiều hàng MySQL vào một trường không?

  3. Làm cách nào để truy xuất các hàng duy nhất dựa trên kết hợp giá trị cột?

  4. Cách nhập / khôi phục bảng MySql bằng PHP

  5. Làm cách nào để đổi tên một Chỉ mục trong MySQL