php - 带有 oop 验证的 SQL 插入
问题描述
我一直在慢慢学习 PHP OOP,我决定是时候开始插入我的表了,但是它似乎没有插入。我将我的代码与工作版本进行了比较,我看不出可能是什么问题,我尝试了一个 var_dump(),查询按预期返回,我通过创建一个新用户测试了我的数据库类,它已成功创建所以我假设不是这样,我测试了 SQL 查询并且它能够插入,我很茫然,因为它现在可能是
形式
<?php
session_start();
require ("classes/Review.php");
require ("classes/Database.php");
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
$reviewing = new ReviewValidation();
$review = $reviewTitle = "";
$post = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING);
$reviewTitle = $post['reviewTitle'];
$review = $post['review'];
$errors = array();
$fields = array(
'title' => array(
'validate' => 'title',
'message' => 'Title must be at least fife characters',
'value' => $reviewTitle,
),
'review' => array(
'validate' => 'review',
'message' => 'Your review must be at least three hundred characters',
'value' => $review,
)
);
foreach($fields as $key => $value)
{
$validation_result = $reviewing->{$value['validate']}($value['value']);
if(!$validation_result)
{
$errors[] = ['name' => $key, 'error' => $value['message']];
}
}
if(empty($errors))
{
try
{
$db = new Database;
$success = ["message" => "Review subbbmitted"];
$process = $db->prepare('INSERT INTO reviews (reviewTitle)
VALUES
(:reviewTitle');
$process->bindValue(':reviewTitle', $reviewTitle);
$process->execute();
}
catch(Exception $e)
{
$errors[] = ['response' => 'fail'];
}
}
}
header('Content-Type: application/json');
if (empty($errors))
{
echo json_encode($success);
}
else
{
echo json_encode(["errors" => $errors]);
}
班级
<?php
class ReviewValidation
{
private
$db,
$review,
$reviewTitle;
private static
$reviewLength = 50,
$rewviewtitleLength = 5;
public static function title($reviewTitle)
{
return(strlen($reviewTitle) >= self::$rewviewtitleLength);
}
public static function review($review)
{
return(strlen($review) >= self::$reviewLength);
}
}
解决方案
看起来您可能在插入查询中缺少关闭 ) :
$process = $db->prepare('INSERT INTO reviews (reviewTitle)
VALUES
(:reviewTitle)');
如果您在 :reviewTitle 之后添加右括号,则在单引号之前您的语法将是正确的(如上所示)。
我还注意到您对 ReviewValidation 类中的静态方法的调用使用了对象运算符 (->)。要访问静态方法,您需要使用范围解析运算符。
因此,您的 $validation_result 行应如下所示:
$validation_result = ReviewValidation::{$value['validate']}($value['value']);
我认为正因为如此,验证可能已经通过,这就是为什么你会遇到没有默认值的问题。
推荐阅读
- c - 从字符串中删除第一个和最后一个字符
- aws-lambda - 如何处理 AWS lambda 服务中的 6 兆字节限制?
- laravel - laravel : 如果列表为空,则删除所有下拉菜单
- excel - VBA返回包含最大值的错误单元格
- regex - 在单元格中查找部分字符串并使用公式返回精确值?
- c++ - 如何使用 OpenMP 并行化最近邻搜索
- arrays - 数组计算通过迭代工作,但在移动到工作表后不会“坚持”
- python - python多线程:阻塞可以线程化吗?
- powershell - 在我的电子邮件正文 -Powershell 上的文件之间添加一行
- regex - JREPL.BAT - 正则表达式删除文件中的行