2010-02-09 126 views
5

可能重复:
mysql_fetch_array() expects parameter 1 to be resource, boolean given in selectmysqli的抛出 “警告:mysqli_stmt_bind_param()预计参数1被mysqli_stmt,布尔给”

我知道这个代码工作在其他网站上我已经得到了,但今天没有打球。 我得到三次警告:

警告:mysqli_stmt_bind_param()预计参数1被mysqli_stmt,布尔在/homepages/14/d248783986/htdocs/subdomains/clients.bionic-comms.co.uk/httpdocs/给出上线无忧无虑/ process.php 33

警告:mysqli_execute()预计参数1被mysqli_stmt,布尔在/homepages/14/d248783986/htdocs/subdomains/clients.bionic-comms.co.uk/httpdocs/给出carefree/process.php 34行

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

有人可以帮我弄清楚这个吗?

如果有帮助,我不得不使用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-连接]:(HY000/2005):未知MySQL服务器主机的本地主机:/tmp/mysql5.sock'(1)

有没有人有任何想法,为什么发生这种情况?

+0

究竟是什么,你通过为$主机名的mysqli \ _connect? '的var_dump($主机名); $ connection = mysqli_connect(...' – VolkerK 2010-02-09 11:37:01

+0

localhost:/tmp/mysql5.sock – Drew 2010-02-09 12:04:17

+0

尝试使用'$ hostname = NULL; $ connection = mysqli_connect(...' – VolkerK 2010-02-09 15:10:38

回答

3

问题来自mysqli_prepare(),在你的情况下,它返回false,因此'布尔给定'的错误。由于您的查询看起来不错,错误必须在$connection。你确定连接有效并且已被定义?

连接应被定义为这样的事:

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

如果连接正确定义,你可以使用echo mysqli_connect_error(),看看是否出现了错误。你说这段代码可以在另一个站点上运行,所以你可能忘了更改凭证或主机?

+0

感谢您的建议,很遗憾,我从mysqli_connect_error () – Drew 2010-02-09 11:06:44

6

添加更多错误处理。
连接失败时,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)); 
} 
... 

对于实际生产环境这样的做法是健谈,死很容易;-)

+0

问题出在准备声明上,所以更新了上面的问题。谢谢 – Drew 2010-02-09 11:27:23

相关问题