php数据库中的初学者查询
我有一个包含以下列的数据库:id、name、zone。 我需要函数返回包含作为参数到达的区域的记录的名称php数据库中的初学者查询,php,mysql,sql,Php,Mysql,Sql,我有一个包含以下列的数据库:id、name、zone。 我需要函数返回包含作为参数到达的区域的记录的名称 static public function mdlShowName($table, $zone){ $stmt = Conection::conect()->prepare("SELECT name FROM $table WHERE zone = :$zone"); $stmt -> bindParam(":name", name, PDO::PARAM_
static public function mdlShowName($table, $zone){
$stmt = Conection::conect()->prepare("SELECT name FROM $table WHERE zone = :$zone");
$stmt -> bindParam(":name", name, PDO::PARAM_STR);
$stmt -> execute();
return $stmt -> fetch();
$stmt-> close();
$stmt = null;
}
参数占位符不是变量。不要使用
$zone
,只需给它一个标签即可
$stmt = Conection::conect()->prepare("SELECT name FROM $table WHERE zone = :zone");
绑定参数所用的名称必须与查询中用作占位符的标签相同。然后将其绑定到具有该值的PHP变量
不要麻烦使用PDO::PARAM_STR
或其他参数类型。MySQL PDO驱动程序无论如何都会忽略这些。如果您使用其他品牌的RDBMS(Oracle、Microsoft等),它们可能更重要
这里的参数名中不需要:
$stmt -> bindParam("zone", $zone);
另一种方法是将数组传递给execute()
。如果执行此操作,请跳过bindParam()
调用
$stmt -> execute( ["zone" => $zone] );
小贴士:这都是在中解释的 参数占位符不是变量。不要使用
$zone
,只需给它一个标签即可
$stmt = Conection::conect()->prepare("SELECT name FROM $table WHERE zone = :zone");
绑定参数所用的名称必须与查询中用作占位符的标签相同。然后将其绑定到具有该值的PHP变量
不要麻烦使用PDO::PARAM_STR
或其他参数类型。MySQL PDO驱动程序无论如何都会忽略这些。如果您使用其他品牌的RDBMS(Oracle、Microsoft等),它们可能更重要
这里的参数名中不需要:
$stmt -> bindParam("zone", $zone);
另一种方法是将数组传递给execute()
。如果执行此操作,请跳过bindParam()
调用
$stmt -> execute( ["zone" => $zone] );
小贴士:这都是在中解释的 请记住,
$stmt->execute([“zone”=>$zone])代码>将以字符串形式处理所有数组输入。。这意味着它可能会扰乱MySQL优化器中除字符串类型之外的数据类型的索引使用。。我相信更现代的MySQL版本(~5.7+)在不正确地“铸造”数据类型时仍然能够使用索引used@RaymondNijland,这是向后的-在索引字符串列中搜索整数常量会破坏优化。在索引整型列中搜索字符串常量时确实使用了索引。我很久以前就遇到过它,但我没有正确地记住详细信息。。我假设您同意在MySQLI中查询时始终使用正确的数据类型。我阅读了PDO-MySQL驱动程序的源代码,了解到它几乎忽略了bindParam()
的类型参数。除了PDO::PARAM_NULL之外,它将所有类型都视为字符串,而不管您告诉它什么。如果是这种情况,那么请记住$stmt->execute([“zone”=>$zone])代码>将以字符串形式处理所有数组输入。。这意味着它可能会扰乱MySQL优化器中除字符串类型之外的数据类型的索引使用。。我相信更现代的MySQL版本(~5.7+)在不正确地“铸造”数据类型时仍然能够使用索引used@RaymondNijland,这是向后的-在索引字符串列中搜索整数常量会破坏优化。在索引整型列中搜索字符串常量时确实使用了索引。我很久以前就遇到过它,但我没有正确地记住详细信息。。我假设您同意在MySQLI中查询时始终使用正确的数据类型。我阅读了PDO-MySQL驱动程序的源代码,了解到它几乎忽略了bindParam()
的类型参数。除了PDO::PARAM_NULL之外,它将所有类型都视为字符串,而不管您告诉它什么