2016-12-05 11 views
0

私はこれを約2時間稼働させようとしてきましたが、何が間違っているのか分かりません。bind_param():variables!= parameters

これは私が取得していますエラーです:

警告:mysqli_stmt :: bind_result():バインド変数の数に/demo/records.phpに準備されたステートメントのフィールド数と一致していませんここにもhttp://paste.ofcode.org/5Wj2QfrUUaGQMEjHVeefes

<?php 
/* 
Allows the user to both create new records and edit existing records 
*/ 

// connect to the database 
include("connect-db.php"); 

// creates the new/edit record form 
// since this form is used multiple times in this file, I have made it a function that is easily reusable 
function renderForm($emri = '', $cmimi ='', $error = '', $id = '') 
{ ?> 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 
<html> 
<head> 
<title> 
<?php if ($id != '') { echo "Edit Record"; } else { echo "New Record"; } ?> 
</title> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> 
</head> 
<body> 
<h1><?php if ($id != '') { echo "Edit Record"; } else { echo "New Record"; } ?></h1> 
<?php if ($error != '') { 
echo "<div style='padding:4px; border:1px solid red; color:red'>" . $error 
. "</div>"; 
} ?> 

<form action="" method="post"> 
<div> 
<?php if ($id != '') { ?> 
<input type="hidden" name="id" value="<?php echo $id; ?>" /> 
<p>ID: <?php echo $id; ?></p> 
<?php } ?> 

<strong>vEmri: *</strong> <input type="text" name="vEmri" 
value="<?php echo $emri; ?>"/><br/> 
<strong>vCmimi: *</strong> <input type="text" name="vCmimi" 
value="<?php echo $cmimi; ?>"/> 
<p>* required</p> 
<input type="submit" name="submit" value="Submit" /> 
</div> 
</form> 
</body> 
</html> 

<?php } 



/* 

EDIT RECORD 

*/ 
// if the 'id' variable is set in the URL, we know that we need to edit a record 
if (isset($_GET['id'])) 
{ 
// if the form's submit button is clicked, we need to process the form 
if (isset($_POST['submit'])) 
{ 
// make sure the 'id' in the URL is valid 
if (is_numeric($_POST['id'])) 
{ 
// get variables from the URL/form 
$id = $_POST['id']; 
$vEmri = htmlentities($_POST['vEmri'], ENT_QUOTES); 
$vCmimi= htmlentities($_POST['vCmimi'], ENT_QUOTES); 

// check that firstname and lastname are both not empty 
if ($vEmri == '' || $vCmimi == '') 
{ 
// if they are empty, show an error message and display the form 
$error = 'ERROR: Please fill in all required fields!'; 
renderForm($vEmri, $vCmimi, $error, $id); 
} 
else 
{ 
// if everything is fine, update the record in the database 
if ($stmt = $mysqli->prepare("UPDATE veturat SET vEmri = ?, vCmimi= ? 
WHERE id=?")) 
{ 
$stmt->bind_param("ssi", $vEmri, $vCmimi, $id); 
$stmt->execute(); 
$stmt->close(); 
} 
// show an error message if the query has an error 
else 
{ 
echo "ERROR: could not prepare SQL statement."; 
} 

// redirect the user once the form is updated 
header("Location: view.php"); 
} 
} 
// if the 'id' variable is not valid, show an error message 
else 
{ 
echo "Error!"; 
} 
} 
// if the form hasn't been submitted yet, get the info from the database and show the form 
else 
{ 
// make sure the 'id' value is valid 
if (is_numeric($_GET['id']) && $_GET['id'] > 0) 
{ 
// get 'id' from URL 
$id = $_GET['id']; 

// get the recod from the database 
if($stmt = $mysqli->prepare("SELECT * FROM veturat WHERE id=?")) 
{ 
$stmt->bind_param("i", $id); 
$stmt->execute(); 

$stmt->bind_result($id, $vEmri, $vCmimi); 
$stmt->fetch(); 

// show the form 
renderForm($vEmri, $vCmimi, NULL, $id); 

$stmt->close(); 
} 
// show an error if the query has an error 
else 
{ 
echo "Error: could not prepare SQL statement"; 
} 
} 
// if the 'id' value is not valid, redirect the user back to the view.php page 
else 
{ 
header("Location: view.php"); 
} 
} 
} 



/* 

NEW RECORD 

*/ 
// if the 'id' variable is not set in the URL, we must be creating a new record 
else 
{ 
// if the form's submit button is clicked, we need to process the form 
if (isset($_POST['submit'])) 
{ 
// get the form data 
$vEmri= htmlentities($_POST['vEmri'], ENT_QUOTES); 
$vCmimi = htmlentities($_POST['vCmimi'], ENT_QUOTES); 

// check that firstname and lastname are both not empty 
if ($vEmri == '' || $vCmimi == '') 
{ 
// if they are empty, show an error message and display the form 
$error = 'ERROR: Please fill in all required fields!'; 
renderForm($vEmri, $vCmimi, $error); 
} 
else 
{ 
// insert the new record into the database 
if ($stmt = $mysqli->prepare("INSERT veturat (vEmri, vCmimi) VALUES (?, ?)")) 
{ 
$stmt->bind_param("ss", $vEmri, $vCmimi); 
$stmt->execute(); 
$stmt->close(); 
} 
// show an error if the query has an error 
else 
{ 
echo "ERROR: Could not prepare SQL statement."; 
} 

// redirec the user 
header("Location: view.php"); 
} 

} 
// if the form hasn't been submitted yet, show the form 
else 
{ 
renderForm(); 
} 
} 

// close the mysqli connection 
$mysqli->close(); 
?> 
ライン117

ここでは、コードです

+2

コードはここにある必要があります。 – chris85

答えて

1

明示的にフェッチされた列を定義します。これは、(ライン112)を動作するはずです:

// get the record from the database 
if($stmt = $mysqli->prepare("SELECT id, vEmri, vCmimi, vNgjyra, vLenda, vTransmisioni, vKilometra, vProdhimi, vVellimi FROM veturat WHERE id=?")) 
{ 
    $stmt->bind_param("i", $id); 
    $stmt->execute(); 

    $stmt->bind_result($id, $vEmri, $vCmimi, $vNgjyra, $vLenda, $vTransmisioni, $vKilometra, $vProdhimi, $vVellimi); 
    $stmt->fetch(); 

    // show the form 
    renderForm($vEmri, $vCmimi, NULL, $id); 

    $stmt->close(); 
} 

列の数あなたのSELECTクエリがフェッチされるとあなたは$stmt->bind_result()内の引数の数が同じでなければなりません。

+0

これは機能しました。本当にありがとう。 – IndigoMass

+0

削除されていませんが、さらに値が追加されても機能しません。 – IndigoMass

+0

'$ stmt-> bind_result($ id、$ vEmri、$ vCmimi);'には、 'SELECT'クエリで取り出すカラムと同じ数の引数を持たなければなりません。 'SELECT *'を使用する場合は、 '$ stmt-> bind_result()'の引数として、 'veturat'テーブルにあるすべてのカラムを引数として追加する必要があります。 – LePhleg