Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php数据库中的初学者查询_Php_Mysql_Sql - Fatal编程技术网

php数据库中的初学者查询

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_

我有一个包含以下列的数据库: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_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之外,它将所有类型都视为字符串,而不管您告诉它什么