如何从MySQL数据库表中调用PHP函数,使函数正常运行?



这是一个很难问的问题。他是我的问题。

是否可以将PHP函数放入MySQL表/单元格中,并在通过PHP查询调用该函数时正常运行?如果有,我该怎么做呢?

这是我的查询代码:

$recent_query = "SELECT * FROM `recently-added` ORDER BY `created` DESC LIMIT 4";
if(!$recent_query_result = $con->query($recent_query)){
    die('There was an error running the query [' . $con->error . ']');
}
下面是显示查询结果的循环代码:
while($row = $recent_query_result->fetch_assoc()) {
  echo  '<div class="col-md-3 col-sm-6 md-margin-bottom-40">
        <div class="easy-block-v2">
            <div class="easy-bg-v2 rgba-' . $row['color'] . '">New</div>
            <img class="img-bordered" alt="' . $row['image-alt'] . '" src="' . $row['image'] . '">       
            <h3><i class="fa fa-smile-o"></i> ' . $row['site-name'] . '</h3>
            <!-- Begin Recently Added Footer Description -->
        </div>  
    </div>';
}

在我的数据库和表'最近添加'我有一个列名为'site-name'。我遍历循环并将结果显示在页面上。在站点名称单元格中,我为每条记录设置了PHP函数。该函数是:

<?php star5(); ?>

当我刷新页面并查看应该调用函数的位置时,它是一个空白。什么都没有。当我去查看源代码看是否有错误时,它会显示我放入单元格中的准确字符。它将文本放在页面上,服务器不运行脚本或解释该函数。

下面是数据库中表的图像。这是关于列'site-name':

https://i.stack.imgur.com/15LtV.jpg

我已经试了将近4个小时了。一如既往的提前感谢!

编辑:这是函数它的自我

function star5() {
echo '<li><i class="color-green fa fa-star"></i></li>
      <li><i class="color-green fa fa-star"></i></li>
      <li><i class="color-green fa fa-star"></i></li>
      <li><i class="color-green fa fa-star"></i></li>
      <li><i class="color-green fa fa-star"></i></li>';
}

不是最好的方法,但在目前的情况下,这是最接近于在DB中引入标志以使其具有逻辑的最佳实践的解决方案。

假设您想要控制用户是否是管理员。您可以添加列is_admin10值,然后在获取结果时,您可以检查if ($row['is_admin'] == 1) { // proccess the logic for administrator } else { // process logic for normal user }

这可以应用在这里,因为您希望在特定事件上执行后端逻辑,或者如果事件不存在,则仅显示行内容。

根据be的说法,如果你为此引入新的列,并检查它以知道是否应该调用star5(),那将会更好,但在当前上下文中,你可以添加一个字符串,在这个字符串上你将触发函数。

假设字符串是CUSTOM FUNCTION。然后,如果您想在取指针移动到这一行时执行star5(),那么您可以在这一行添加CUSTOM FUNCTION字符串。否则添加正常内容(如真实sitename)。

之后,当您获取记录时,执行一个简单的条件检查:

if ($row['sitename'] == 'CUSTOM FUNCTION') {
    star5();
} else {
    echo $row['sitename'];
}

尝试使用php eval()函数。例如:

eval("$row['site-name'] = "$row['site-name']";");

另外,从数据中删除php标记。试着只保留star5()函数调用。

查看此链接了解更多关于eval的详细信息

我有一个解决方案在MySQL行或任何其他PHP字符串内运行函数。

。,用户需要放一个从服务器目录获取图像的滑块,但他不想复制所有链接,制作HTML代码等。

您需要做的第一件事是为函数创建自己的语法。我选择像这样-> [functionName('arg1', 'arg2')].

创建一个StringParser类,该类查找给定字符串中出现的所有自定义函数,接受参数并运行CustomFunctions类中的自定义函数。然后,它将给定字符串中的函数文本替换为返回值:

protected function substitute($string, $start) {
    $callback = "StringFunctions::".$start;
    $offset = 0;
    $start = '['.$start.'(';
    $end   = ')]';
    do {
        $argsArr = [];
        $argsArrNormal = [];
        $pos = strpos($string, $start, $offset);
        if (!$pos) return $string;
        $args_pos = strlen($start) + $pos;
        $args_len = strpos($string, $end, $args_pos) - $args_pos;
        $args     = substr($string, $args_pos, $args_len);
        $argsArr  = preg_split("/'s*,s*'/", trim($args));
        foreach ($argsArr as $arg) {
            $argsArrNormal[] = trim($arg, "'");
        }
        $replaced_value = call_user_func_array($callback, $argsArrNormal);
        $string = str_replace($start.$args.$end, $replaced_value, $string);
        $offset++;
    } while($pos);
    return $string;
}

之后,用继承StringParser的自定义函数创建StringFunctions类。函数过滤器运行StringParser检查所有自定义函数的出现:

public function filter($string) {
    $string = StringParser::substitute($string, "printHTML");
    $string = StringParser::substitute($string, "printText");
    $string = StringParser::substitute($string, "multiply");
    $string = StringParser::substitute($string, "getDate");
    $string = StringParser::substitute($string, "printRect");
    return $string;
}
protected function printHTML(...$tags) 
{
    $result = '';
    foreach($tags as $tag) {
        $result .= "<$tag>";
    }
    return $result;
}
protected function printText(...$text) 
{
    $result = '';
    foreach($text as $key => $value) {
        if ($key == 0) continue;
        $result .= "<$text[0]>$value</$text[0]>";
    }
    return $result;
}
protected function printRect($amount, $width, $height, $color) 
{
    $result = '';
    for($i = 0; $i < $amount; $i++) {
        $result .= "<div style='margin:5px;width:$width;height:$height;background-image:url(https://picsum.photos/$width/$height/?random);display:inline-block'></div>";
    }
    return $result;
}
protected function multiply($number, $times) 
{
    return $number * $times;
}
protected function getDate($args) 
{
    return date($args);
}

运行代码:

$StringFunctions = new StringFunctions(); 
$string = "A string can do more than just being itself[printHTML('hr')] [printRect('3','380','380','#eee')][printHTML('hr','br')] 13 * 14.4 =[multiply('13','14.4')][printHTML('br','br','hr')] [printText('h1','Hello, pony!')] Today is [getDate('Y - m - d')]!Today is [getDate('Y - m - d')]!Today is [getDate('Y - m - d')]!Today is [getDate('Y - m - d')]!";
echo $StringFunctions->filter($string);

最新更新