Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.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中使用字符串运行MySQL查询_Php_Mysql - Fatal编程技术网

在php中使用字符串运行MySQL查询

在php中使用字符串运行MySQL查询,php,mysql,Php,Mysql,Answer-found语法:我的字符串的列名必须包含在反勾中,因为它们包含空格。注意,这意味着这篇文章的大部分内容与这个问题无关。该代码已被更正,以防有人想做类似的事情 因此,我正在做一个foreach循环,为数据库中的非静态列分配一个值1/0,它需要支持列的添加/删除/编辑。我正在使用$connectionvar->query$queryvar;为了将列名更改为循环中的变量,我尝试使用自定义生成的字符串$queryvar来执行查询,直到现在为止,这些查询工作正常。我一直在通过echo输出这个

Answer-found语法:我的字符串的列名必须包含在反勾中,因为它们包含空格。注意,这意味着这篇文章的大部分内容与这个问题无关。该代码已被更正,以防有人想做类似的事情

因此,我正在做一个foreach循环,为数据库中的非静态列分配一个值1/0,它需要支持列的添加/删除/编辑。我正在使用$connectionvar->query$queryvar;为了将列名更改为循环中的变量,我尝试使用自定义生成的字符串$queryvar来执行查询,直到现在为止,这些查询工作正常。我一直在通过echo输出这个字符串,它看起来和我的函数查询完全一样,但不知何故没有运行。我尝试使用eval来解决这个问题,但是没有用,我觉得使用eval是安全的,因为用户输入是单选按钮

下面是代码背后的循环和我的思维过程。如果有些东西看起来不连贯或者很愚蠢,请参考我的用户名

foreach($rdb as $x) {  //$rdb is a variable retrieved from $_POST earlier in the code.
$pieces = explode("qqqppp", $x); //Splits the string in two (column name and value) (this is a workaround to radio buttons only sending 1 value)
$qualname = $pieces[0];  //Column name from exploded string
$qualbool = $pieces[1];  //desired row value from exploded string
$sql = 'UPDATE users SET ';  //building the query string
$sql .= '`$qualname`';
$sql .= '=\'$qualbool\' WHERE username=\'$profilename\''; //$profilename is retrieved earlier to keep track of the profile I am editing.
eval("\$sql = \"$sql\";");  //This fills out the variables in the above string.
$conn->query($sql); //Runs the query (works)
echo ' '.$sql.' <br>'; //echoes the query strings on my page, they have the exact same output format as my regular queries have.
}
}}
下面是字符串回音的示例:

更新用户设置示例资格3='1',其中用户名='Admin2'

为了进行比较,在该循环之外为静态列回显类似的工作查询变量如下所示:

更新用户集profiletext='qqq'其中用户名='Admin2'

正如您所看到的,字符串格式肯定是按计划的,但不知何故没有执行。我做错了什么


附言:是的,我在发布它之前做了大量的研究,因为自从我一个月前开始网络开发以来,我还有数百个其他问题。不知怎的,这件事让我难堪,也许是因为它是一个神可怕的黑客,一开始就没有人会考虑。

你需要使用回扣来引用那些有空格的列名。因此,循环中的第一个查询输出如下:

UPDATE users SET Example Qualification 3='1' WHERE username='Admin2'
但应该是这样的:

UPDATE users SET `Example Qualification 3`='1' WHERE username='Admin2'
将PHP代码更改为:

$sql = 'UPDATE users SET `';  // I added an opening backtick around the column name
$sql .= '$qualname`';         // I added a closing backtick around the column name
$sql .= '=\'$qualbool\' WHERE username=\'$profilename\'';
示例限定3:这是您的Mysql列名的名称吗

列名称中不应使用空格或大写/小写

首选:示例\u资格\u 3

编辑:

获取列名和注释的步骤


显示来自用户的完整列

以供将来参考,如果同时包含所获得的错误输出,您将更快地获得更好的答案。好的,注意到。谢谢你的帮助。天哪,这就成功了。谢天谢地,这只是一个小小的语法错误。谢谢。我想我应该找出这两个查询中的哪一个现在起作用了。变量是如何用单引号中的值替换的?@ReneKorss你能说得更具体一点吗?若您想知道$sql字符串的存根2,那个么它可以工作,因为我通过eval运行它,eval将其作为代码读取。我最初通过将变量封装在“..”中解决了这个问题但我把它改成了这个,以检查它是否是问题的根源。@noobequaltour当然。遗漏了那部分代码:全部清除。这些列由网站管理员定义/编辑/添加/删除,以说明可能的资格类型的变化。我通常坚持正确的格式,但我想不出在这个设计中实现它的方法。起初,我的资格证书放在一张单独的桌子上,但把它们放在一起很麻烦。如果你有合理的理由让我修改这个决定,我会做它,而不是像这样的小语法问题。你做你能做的,没关系。看到不合格的管理员如此糟糕地命名他们的数据库,我很难过。可以肯定的是,如果整个数据库都是这样,并且您的项目处于高级状态,那么您将不会改变这一点。但如果你只是刚开始,我建议你改变。啊,说实话,这是我自己的设计。我也使用列名作为显示值,这就是为什么命名必须支持这样的混乱。这些列表示用户可能需要或不需要承担某些工作任务(如Row boat讲师)的资格。由于这些要求各不相同,我需要给他们机会添加这些,因为他们去使用该网站。也许使用列名从字段中获取第二个值是一个彻底的hackjob解决方案,但范围太小,足以满足需要。在这种情况下,我建议将您的列命名为example_qualification_3,并将其注释为example qualification 3。然后使用我刚刚添加到答案中的请求检索您的列名+其注释用户友好名称。我想您正在使用MySQL,这听起来是一种相当轻松的方法。谢谢