不会在php中从视图执行mysql语句

不会在php中从视图执行mysql语句,php,mysql,view,Php,Mysql,View,我一直在尝试在mysql表中查询视图,但似乎无论我做什么都不会执行,如果我在mysql direct it fires上进行精确查询,我不知道哪里出错,为了进一步排除故障,我将查询从另一个表更改为另一个表,并且不执行它,请查找以下代码: $query4 = "select PageName FROM testpermission WHERE UserID='".$_SESSION['id']."' and PageName NOT LIKE '/%'"; $stmt2 = mysqli_stmt

我一直在尝试在mysql表中查询视图,但似乎无论我做什么都不会执行,如果我在mysql direct it fires上进行精确查询,我不知道哪里出错,为了进一步排除故障,我将查询从另一个表更改为另一个表,并且不执行它,请查找以下代码:

$query4 = "select PageName FROM testpermission WHERE UserID='".$_SESSION['id']."' and PageName NOT LIKE '/%'";
$stmt2 = mysqli_stmt_init($conn);
mysqli_stmt_prepare($stmt2,$query4);
if( mysqli_stmt_execute($stmt2)){
die("i did it");
}
mysqli_stmt_bind_result($stmt2,$PageNAme);
 die("no i didnt");

可能需要修剪用户ID字段,请尝试以下操作:

$stmt = mysqli_prepare($conn, "select PageName FROM testpermission WHERE TRIM(UserID)= ? and PageName NOT LIKE '/%'");
mysqli_stmt_bind_param($stmt, "s", $_SESSION['id']);
if( mysqli_stmt_execute($stmt)){
    die("i did it");
} else {
    printf("Error: %s.\n", mysqli_stmt_error($stmt));
}

可能需要修剪用户ID字段,请尝试以下操作:

$stmt = mysqli_prepare($conn, "select PageName FROM testpermission WHERE TRIM(UserID)= ? and PageName NOT LIKE '/%'");
mysqli_stmt_bind_param($stmt, "s", $_SESSION['id']);
if( mysqli_stmt_execute($stmt)){
    die("i did it");
} else {
    printf("Error: %s.\n", mysqli_stmt_error($stmt));
}
谢谢大家

mysql中的视图似乎有一个bug,所以我直接将其更改为查询

[code]从(
tblpermissions
tbluserpermissionsjoin
tbluserpermissions
on(
tblpermissions
PermissionID
=
tbluserpermissions
permissiond
)中选择
tbluserpermissions
),其中userid=“$\u SESSION['id']”,PageName与“/%”不一样[code]谢谢大家

mysql中的视图似乎有一个bug,所以我直接将其更改为查询


[code]从(
tblpermissions
tbluserpermissionsjoin
tbluserpermissions
on(
tblpermissions
PermissionID
=
tbluserpermissions
permissiond
)中选择
tbluserpermissions
),其中userid=“$\u SESSION['id']”,PageName与“/%”不一样[code]

警告:当使用
mysqli
时,您应该使用和将用户数据添加到查询中。不要使用字符串插值或串联来完成此操作,因为您已经创建了严重的错误。永远不要将用户数据直接放入查询中,即使是从
$\u会话
,因为如果有人试图利用您的错误,这可能是非常有害的。这是一些非常不寻常的
mysqli
代码,我不确定您是从哪里学会这样做的。本文概述了一些最佳实践,这些实践将使您的代码更易于遵循。值得注意的是,你会发现面向对象的接口远没有那么冗长,并且避免了在错误的变量上调用错误方法的许多常见错误。谢谢,这是过程代码,而不是面向对象的,我知道。我想说的是,使用
mysqli
的面向对象方法要简单得多,我强烈建议尝试一下。存在procural模式的唯一原因是PHP4,一个早已过时的版本。是的,我想做更改,但atm我非常关心这个查询,它在本地主机和web上都不起作用警告:当使用
mysqli
时,你应该使用它,并将用户数据添加到你的查询中。不要使用字符串插值或串联来完成此操作,因为您已经创建了严重的错误。永远不要将用户数据直接放入查询中,即使是从
$\u会话
,因为如果有人试图利用您的错误,这可能是非常有害的。这是一些非常不寻常的
mysqli
代码,我不确定您是从哪里学会这样做的。本文概述了一些最佳实践,这些实践将使您的代码更易于遵循。值得注意的是,你会发现面向对象的接口远没有那么冗长,并且避免了在错误的变量上调用错误方法的许多常见错误。谢谢,这是过程代码,而不是面向对象的,我知道。我想说的是,使用
mysqli
的面向对象方法要简单得多,我强烈建议尝试一下。唯一存在procural模式的原因是PHP 4,一个早已过时的版本。是的,我想做更改,但atm我非常关心这个查询,它在本地主机和web上都不起作用。谢谢,它给了我这个错误:Prepared语句需要重新准备。更改数据库设置。com中的示例:table_open_cache 128=>16384 table_definition_cache 1024=>16384 tmp_table_size 32M=>64M join_buffer_size 256k=>512k我在数据库上没有任何负载,它脱机时我只使用lil数据进行测试,但非常感谢您告诉我错误在哪里,我想我将创建一个查询来获取它,而不是表视图。谢谢,它给了我这个错误:Prepared语句需要重新准备。更改数据库设置。com中的示例:table\u open\u cache 128=>16384 table\u definition\u cache 1024=>16384 tmp\u table\u size 32M=>64M join\u buffer\u size 256k=>512k我在数据库上没有任何负载,它处于脱机状态,我只使用lil数据进行测试,但非常感谢您告诉我错误在哪里,我想我将创建一个查询来获得它,而不是表视图。