Mysqli抛出“警告:mysqli_stmt_bind_param()期望参数1为mysqli_stmt,给定布尔值”

时间:2010-02-09 10:50:39

标签: php mysqli

  

可能重复:
  mysql_fetch_array() expects parameter 1 to be resource, boolean given in select

我知道这段代码适用于我已经拥有的另一个网站,但今天它还没有播放。 我收到三个警告:

  

警告:mysqli_stmt_bind_param()要求参数1为mysqli_stmt,布尔值在第33行/homepages/14/d248783986/htdocs/subdomains/clients.bionic-comms.co.uk/httpdocs/carefree/process.php中给出< / p>      

警告:mysqli_execute()要求参数1为mysqli_stmt,布尔值在第34行/homepages/14/d248783986/htdocs/subdomains/clients.bionic-comms.co.uk/httpdocs/carefree/process.php中给出< / p>      

警告:mysqli_stmt_affected_rows()要求参数1为mysqli_stmt,布尔值在第35行/homepages/14/d248783986/htdocs/subdomains/clients.bionic-comms.co.uk/httpdocs/carefree/process.php中给出< / p>

有人可以帮我解决这个问题吗?

如果有帮助,我必须使用htaccess升级到PHP5。

$connection = mysqli_connect($hostname, $username, $password, $dbname);

if (!$connection) {
    die('Connect Error: ' . mysqli_connect_error());
}

$query = "INSERT INTO entries (name, dob, school, postcode, date) VALUES (?,?,?,?,?)";
$stmt1 = mysqli_prepare($connection, $query);
mysqli_stmt_bind_param($stmt1, 'sssss',$name,$dob,$school,$postcode,$date);
mysqli_execute($stmt1);
if(mysqli_stmt_affected_rows($stmt1) != 1)
    die("issues");
mysqli_stmt_close($stmt1);
return "new";

修改

经过一番调查后发现,准备声明不与mysql4打球。我创建了一个新的mysql5数据库,但是当我尝试连接时,我现在收到此错误:

  

警告:mysqli_connect()[function.mysqli-connect] :( HY000 / 2005):未知的MySQL服务器主机'localhost:/tmp/mysql5.sock'(1)

有没有人知道为什么会这样?

2 个答案:

答案 0 :(得分:8)

添加更多错误处理 当连接失败时,mysqli_connect_error()可以告诉您更多详细信息 在准备语句失败时mysqli_error()有关于错误的更多信息 执行语句失败时,请询问mysqli_stmt_error()。等等...... 每当mysqli模块的函数/方法返回false以指示错误时,a)处理该错误并且b)决定是否有意义继续。例如。连接失败时继续数据库操作没有意义。但是,当一次插入失败时继续插入数据可能是有意义的(可能有意义,可能没有)。

对于测试,您可以使用以下内容:

$connection = mysqli_connect(...);
if ( !$connection ) {
  die( 'connect error: '.mysqli_connect_error() );
}

$query = "INSERT INTO entries (name, dob, school, postcode, date) VALUES (?,?,?,?,?)";
$stmt1 = mysqli_prepare($connection, $query);
if ( !$stmt1 ) {
  die('mysqli error: '.mysqli_error($connection);
}
mysqli_stmt_bind_param($stmt1, 'sssss',$name,$dob,$school,$postcode,$date);
if ( !mysqli_execute($stmt1) ) {
  die( 'stmt error: '.mysqli_stmt_error($stmt1) );
}
...

对于真实的生产环境,这种方法很健谈,很容易死; - )

答案 1 :(得分:3)

问题来自mysqli_prepare(),在您的情况下会返回false,因此会出现“布尔给定”错误。由于您的查询似乎没问题,错误必须在$connection中。您确定连接是否正常并已定义?

连接应该定义为:

$connection = mysqli_connect("localhost", "my_user", "my_password", "world");

如果正确定义了连接,您可以使用echo mysqli_connect_error()查看是否出现了问题。您说代码在另一个站点上运行,所以您可能忘记更改凭据或主机?