2017-08-24 47 views
0

我是新来的PHP,但这里是我的代码,我越来越:PHP错误

Fatal error: Uncaught Error: Call to a member function bindParam() on boolean

我已经测试和试验,不知道是怎么了,一些指针,将真正帮助继续前进 - 感谢提前。

$url_slot = parse_url($str); 
$urlArray = explode('/',$url_slot['path']); 
$passid = $urlArray['11']; // serial no 
$deviceId = $urlArray['8']; 
$passtype = $urlArray['10']; 
$servername = "host"; 
$username = "user"; 
$password = "******"; 
$dbname = "db"; 



try { 
    // Create connection 
$conn = new mysqli($servername, $username, $password, $dbname); 
// Check connection 
if ($conn->connect_error) { 
    die("Connection failed: " . $conn->connect_error); 
} 


    $stmt = $conn->prepare("INSERT INTO Registrations (device_id, pass_id, pass_type) VALUES 
(:device_id,:pass_id,:pass_type,:created,:modified)"); 
    $stmt->bindParam(':device_id',$device_id); 
    $stmt->bindParam(':pass_id',$pass_id); 
    $stmt->bindParam(':pass_type',$pass_type); 


    $device_id = $deviceId; 
    $pass_id = $passid; 
    $pass_type = $passtype; 

    $stmt->execute(); 
    $conn = null; 
} catch (PDOException $e) { 
    print "Error!: " . $e->getMessage() . "<br/>"; 
    die(); 
} 



try { 
    $conn = new mysqli($servername, $username, $password, $dbname); 
    $stmt = $conn->prepare("INSERT INTO Devices (push_token) VALUES 
(:push_token)"); 
    $stmt->bindParam(':push_token',$push_token); 
    $push_token = $content['pushToken']; 
    $stmt->execute(); 
    $conn = null; 
} catch (PDOException $e) { 
    print "Error!: " . $e->getMessage() . "<br/>"; 
    die(); 
} 

?> 

任何帮助将是伟大的。

+2

你正在尝试3列绑定到5个占位符。 ':DEVICE_ID,:pass_id,:pass_type,:创建:modified' VS'DEVICE_ID,pass_id,pass_type'错误对​​该报告做准备,你应该得到的东西回来,http://php.net/manual/en/mysqli。 error.php。 – chris85

+2

你的语句是'FALSE'因为查询语法错误的(按@ chris85的言论)...和'FALSE'没有一个'bindParam'方法。您应该始终检查任何PDO调用的状态(在这种情况下,您没有检查“准备”是否有效)。 – YvesLeBorg

+4

您还在混合使用API​​。 'PDO'!='mysqli' – Qirel

回答

1

只要你发送了错误的类型对函数的致命错误,打印您试图通过对犯罪行的参数。

每当问题中的错误类型是布尔值时,检查是否为每个函数返回都写了测试,如果函数失败了,可能会伤害程序,因为一个变量包含布尔值时通常不应该这样做,因为功能,让你的价值失败,并返回false

就你而言,它更简单:错误并不告诉你,你试图将一个布尔值传递给一个等待另一个类型的函数,它告诉你,你试图调用方法bind_param(),这意味着你将一个布尔值视为一个对象。

$stmt->bindParam(':device_id',$device_id); 

因此,它是空的$stmt

$stmt = $conn->prepare("INSERT INTO Registrations (device_id, pass_id, pass_type) VALUES (:device_id,:pass_id,:pass_type,:created,:modified)"); 

返回你分配给$stmt是一个值的函数,我建议你测试,如果$stmt设置后立即从false不同,从$conn打印错误类型和消息,如果它不是。

除此之外,我得到你还不习惯于用API工作的感觉,你似乎缺少一些经验,也尝试使用PDO异常与库MySQLi工作时。也许你应该花一些时间阅读他们各自的docmuentations。

堆栈溢出还装着两方面的各种问题和文档。

+0

PDO和mysqli不会混合...你可能是指mysql(RDBMS)。 – YvesLeBorg

+0

@YvesLeBorg对不起,如果我的句子不明确,我指出这实际上是OP所要做的。 – ksjohn