在从mySQL数据库获取信息时遇到问题

时间:2013-04-16 19:28:00

标签: php mysql

我在另一个网站上工作,但修改这个问题导致我出现问题,我无法看到它认为有额外参数。

我稍后会添加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:%s\t Email:%s\t Town:%s\t Location:%s\t Google Maps Link:%s\t", $col2,    $col3, $col5, $col8, $col9);
   echo "<br>";

   }

    /* close statement */
      mysqli_stmt_close($stmt);


 /* close connection */
 mysqli_close($con);

 ?>

回复我从网站上回复如下。 这些是搜索的匹配项:

PHP错误消息:

  

警告:mysqli_stmt_bind_param()[function.mysqli-stmt-bind-param]:变量数量与第18行/home/a5839517/public_html/search.php中预准备语句中的参数数量不匹配

免费虚拟主机:

  

array(3){[“county”] =&gt; string(15)“Outside Ireland”[“select1”] =&gt; string(12)“Ballincollig”[“select”] =&gt; 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语句和列名。

3 个答案:

答案 0 :(得分:1)

尝试一下,而不是在城镇周围引用,而是在城镇周围使用反叛。

答案 1 :(得分:1)

问题是,正如评论中的几位人员所说,您将null传递给mysqli_stmt_bind_param

var_dump确实清楚地表明您应该使用$_POST['select1']的值。要验证,也许不是转储$_POST数组的内容,而是在第19行上打印/回显mysqli_stmt_error()的返回值也证明非常有用。

答案 2 :(得分:0)

不要在周围加上引号?和你的声明中的城镇:

$query="SELECT name,email,town,location,gmapslink FROM users WHERE 'town' = '?'";

应该是

$query="SELECT name,email,town,location,gmapslink FROM users WHERE town = ?";

town是列名,不应引用; ?是一个被mysql接口替换的特殊字符。