我在另一个网站上工作,但修改这导致了我的问题,我看不出它认为有额外的参数。
我将添加Javascript以后,但我需要能够从下拉菜单中选择,并从数据库打印相应的信息。我的PHP代码如下:
include('definitions.php');
$con=mysqli_connect(DB_HOST,DB_USER,DB_PASS,DB_NAME);
// Check connection
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
echo "These are the matches for the search";
echo "<br>";
$query="SELECT name,email,town,location,gmapslink FROM users WHERE `town` = '?'";
$stmt = mysqli_prepare($con, $query);
mysqli_stmt_bind_param($stmt, "s", $_POST['select1']);
var_dump($_POST);
mysqli_stmt_execute($stmt);
/* bind variables to prepared statement */
mysqli_stmt_bind_result($stmt, $col2, $col3, $col5, $col8, $col9);
while(mysqli_stmt_fetch($stmt))
{
printf("Name:%st Email:%st Town:%st Location:%st Google Maps Link:%st", $col2, $col3, $col5, $col8, $col9);
echo "<br>";
}
/* close statement */
mysqli_stmt_close($stmt);
/* close connection */
mysqli_close($con);
?>
我从网站上得到的回复如下。以下是搜索的匹配项:
PHP Error Message:
警告:mysqli_stmt_bind_param() [function。[mysql -stmt-bind-param]:变量的数量不匹配在/home/a5839517/public_html/search.php第18行准备语句中的参数数量
免费虚拟主机:
array(3) {["county"]=> string(15)"爱尔兰境外" ["select1"]=> string(12)"Ballincollig" ["select"]=> NULL}
在数据库上运行SQL代码工作得很好,但在这种情况下,为了使其工作,我必须在town
和?
周围添加引号。
是否知道我的问题是什么,因为参数似乎是正确的
从原始文件中添加编辑,调用上面的php:
<form action="search.php" method="post">
County <select name="county">
<option> Outside Ireland </option>
<option> Antrim </option>
<option> Armagh </option>
</select>
<br>
Name of Book
<?php
mysql_connect(DB_HOST,DB_USER,DB_PASS) or die("Connection Failed");
mysql_select_db(DB_NAME)or die("Connection Failed");
$query = "SELECT DISTINCT town FROM users";
$result = mysql_query($query);
?>
<select name="select1">
<?php
while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
?>
<option value="<?php echo $line['town'];?>"> <?php echo $line['town'];?> </option>
<?php
}
?>
</select>
<input type="submit">
</form>
上面的代码被更正为select1语句和列名是反引号。
试一试,用反号代替引号。
问题是,正如几个人在评论中所说,你正在将null
传递给mysqli_stmt_bind_param
。
var_dump
确实清楚地表明您应该使用$_POST['select1']
的值。为了验证,也许不是转储$_POST
数组的内容,而是在第19行上打印/回显mysqli_stmt_error()
的返回值也可以证明非常有用。
不要在?在你的声明中:
$query="SELECT name,email,town,location,gmapslink FROM users WHERE 'town' = '?'";
应该是
$query="SELECT name,email,town,location,gmapslink FROM users WHERE town = ?";
town是列名,不应该加引号;?