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

Dre*_*rew 6 php mysqli

可能重复:
mysql_fetch_array()期望参数1是资源,在select中给出boolean

我知道这个代码可以在我已经拥有的另一个网站上运行,但今天它还没有播放.我得到三个警告:

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

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

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

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

如果这有帮助,我不得不使用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";
Run Code Online (Sandbox Code Playgroud)

编辑

经过一些调查后发现,准备语句不能与mysql4一起玩.我创建了一个新的mysql5数据库,但是当我尝试连接时,我现在收到此错误:

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

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

Vol*_*erK 9

添加更多错误处理.
当连接失败时,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) );
}
...
Run Code Online (Sandbox Code Playgroud)

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


Tat*_*nen 3

问题来自mysqli_prepare(),在您的情况下返回false,因此出现“布尔给定”错误。由于您的查询看起来没问题,因此错误一定位于$connection. 您确定连接有效并且已定义吗?

连接应该定义如下:

$connection = mysqli_connect("localhost", "my_user", "my_password", "world");
Run Code Online (Sandbox Code Playgroud)

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