【问题标题】:How do I convert this SQL to prepared statement?如何将此 SQL 转换为准备好的语句?
【发布时间】:2021-05-09 01:41:53
【问题描述】:

我需要有关将此 SQL 转换为准备好的语句的帮助。这是我的搜索栏。我希望我能得到一些帮助,因为我是这方面的初学者。

这是我的 SQL

$conn = mysqli_connect('localhost','root','','my_db');
            
$mysql = "SELECT * FROM catetable";
$bike_list = mysqli_query($conn,$mysql);

$catesql = "SELECT catename FROM catetable";
$cate_list = mysqli_query($conn,$catesql);

这就是我想更改为 Prepared Statement 的内容

if (isset($_GET['search']))
{
    
    $search = $_GET['search'];
    
    $searchlist = array();
    $lowersearchlist = array();
    $i = 0;
    while ($one_cate = mysqli_fetch_assoc($cate_list))
    {
        $searchlist[$i] = $one_cate['catename'];
        $lowersearchlist[$i] = strtolower($one_cate['catename']);
        $i++;
    }
    if (in_array($search,$searchlist) || in_array($search,$lowersearchlist))
    {
        header("Location:feature.php");
    }
    else
    {
        header("Location:index.php?error=true");
        
    }
}

【问题讨论】:

  • SQL 在哪里?
  • 这段代码中没有任何东西可以转换。好像少了一部分。 $cate_list 来自哪里?
  • @El_Vanja 抱歉,我已经更新了问题。
  • 由于您的查询没有参数,因此实际上不需要准备它们,只需调用query 就可以了。如果您仍然想转换,这一切都归结为调用prepareexecute,根据答案中的示例。
  • @El_Vanja 感谢您向我解释。

标签: php sql mysqli prepared-statement


【解决方案1】:

编写与WHERE 子句中的参数匹配的查询。 MySQL 通常默认进行不区分大小写的比较,因此您不需要获取所有行来精确比较它们并且不区分大小写。

if (isset($_GET['search'])) {
    $stmt = $conn->prepare("SELECT COUNT(*) AS c FROM yourTable WHERE catename = ?");
    $stmt->bind_param("s", $_GET['search']);
    $stmt->execute();
    $result = $stmt->get_result();
    $row = $result->fetch_assoc();
    if ($row['c'] > 0) {
        header("Location: feature.php");
    } else {
        header("Location: index.php?error=true";
    }
}

【讨论】:

    猜你喜欢
    • 2021-11-11
    • 1970-01-01
    • 1970-01-01
    • 2017-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-04
    • 1970-01-01
    相关资源
    最近更新 更多