gpt4 book ai didi

PHP MySQL 绑定(bind)语句情况

转载 作者:行者123 更新时间:2023-11-29 19:09:50 25 4
gpt4 key购买 nike

我必须在我的应用程序中创建一个 Web 服务,以使用 PHP 从 MySQL 数据库中提取数据。我不知道我想做的事情是否有效,因为我是 PHP 新手。这是代码:

$queryString = "SELECT uniqueID, address FROM main WHERE (state = ?) AND (propType IN (?)";
$stmt = mysqli_prepare($this->connection, $queryString);
mysqli_stmt_bind_param($stmt, 'ss', $itemst, $itempt);
mysqli_stmt_execute($stmt);

我的问题与我的数据库的 propType 列的绑定(bind)语句有关。在我的应用程序中,用户可以单击复选框来搜索大约 8 种不同的属性类型。我想做的是将字符串拼接成上面由 $itemp 表示的一个值,然后将这个单个字符串绑定(bind)到 SQL 语句,但我不知道我是否可以做到这一点???

如果我不能,那么我必须执行以下操作:

$queryString = "SELECT uniqueID, address FROM main WHERE (state = ?) AND (propType IN (?,?,?,?,?,?,?,?)";

这在绑定(bind)表达式中可能会变得复杂,因为我必须测试选择了哪些属性类型并提出各种不同的查询/绑定(bind)表达式,这将很费力。

所以我的问题是,使用“IN”子句,我可以将所有字符串值拼接成一个逗号分隔的字符串,然后将这个单个值绑定(bind)到我的查询,还是必须传递一个单独的值每个可能值的变量并单独绑定(bind)到它们?

感谢您的见解!

最佳答案

我编辑了我的答案,因为它不起作用,并以 PDO 风格重写了代码片段并对其进行了测试(只是使用了不同的表模式)。

这里是:

$servername = "localhost";
$username = "user";
$password = "pass";
$db = "stackoverflow";

try{
$con = new PDO("mysql:host=$servername;dbname=$db", $username, $password);
$con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$con->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); // set this if you want to bind LIMIT values

}catch(PDOException $e){
$error = "Connection failed: " . $e->getMessage();
}

$itemst = ['active']; // cast search parameters as array so you can merge them
// watch the order in which you bind them! Else you will never find matching entries
$container = ['some title 1','some title 3','some title 5'];
$limit = [0,2];
$params = array_values(array_merge($itemst,$container,$limit));
$bindStr = implode(",", array_map(function($val) { return "?"; }, $container));
$queryString = "SELECT course_title FROM mysqli_quick WHERE state = ? AND course_title IN ({$bindStr}) LIMIT ?,?";

$stmt = $con->prepare($queryString);

$stmt->execute($params);
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
var_dump($result);

打印

array (size=3)
0 =>
array (size=1)
'course_title' => string 'some title 1' (length=12)
1 =>
array (size=1)
'course_title' => string 'some title 3' (length=12)

关于PHP MySQL 绑定(bind)语句情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43173646/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com