准备好的语句中存在错误-未定义的变量:sql和致命错误:调用成员函数bind_param()


Errors in prepared statement - Undefined variable: sql and Fatal error: Call to a member function bind_param()

我的代码中有两个错误:

Notice: Undefined variable: sql
AND
Fatal error: Call to a member function bind_param() on a non-object

我的代码是:

//if there is a plant name
if (isset($_POST['plant_name']) && $_POST['plant_name']) { 
$where .= "AND (common_name) LIKE ? OR (latin_name) LIKE ?";
}
$stmt = $conn2->prepare($sql . $where);
if (isset($_POST['plant_name']) && $_POST['plant_name']) { 
$stmt->bind_param('s', strtolower($_POST['plant_name']));
$stmt->bind_param('s', strtolower($_POST['plant_name'])."%");
}
//execute query
$stmt->execute();
// get the roses and do the query!
$sql = "SELECT * FROM rosename";
//do we have a 'where string' to add to this query
if ($where) {
$query .= $where;
}
$sql = mysql_query($query, $conn2);

我基本上是想让某人在plant_name字段中键入一个植物,然后看看它是否像DB中latin_name和common_name属性中的任何值一样。

有人能帮帮我吗。

$stmt对象可能设置为false,因为准备的查询是错误的。

试试这个:

$stmt = $conn2->prepare($sql . $where);
if (false === $stmt) {
    var_dump($conn2->errorCode();
}

您可以阅读错误代码并通过PHP文档进行准备。

此外,您还需要将$sql和$where初始化移到$stmt代码块之上。这就是为什么你会得到未定义的错误。

您似乎正在使用未定义的变量$sql准备一个语句,这就是通知错误所说的。在您的代码中,我们看不到在您尝试使用该变量的prepare语句之前定义的任何名为$sql的变量。