在尝试将此网站放在一起时,我在编写允许版主添加产品的功能时遇到了问题。我附上了我得到的代码和错误信息。
功能(来自product-model.php):
function insPro(){
// Create a connection object using the acme connection function
$db = acmeConnect();
// The SQL statement
$sql = 'INSERT INTO inventory (invName, invDescription, invImage, invThumbnail, invPrice, invStock, invSize, invWeight, invLocation, categoryId, invVendor, invStyle)
VALUES (:invName, :invDescription, :invImage, :invThumbnail, :invPrice, :invStock, :invSize, :invWeight, :invLocation, :categoryId, :invVendor, :invStyle)';
// Create the prepared statement using the acme connection
$stmt = $db->prepare($sql);
$stmt->bindValue(':invName', $invName, PDO::PARAM_STR);
$stmt->bindValue(':invDescription', $invDescription, PDO::PARAM_STR);
$stmt->bindValue(':invImage', $invImage, PDO::PARAM_STR);
$stmt->bindValue(':invThumbnail', $invThumbnail, PDO::PARAM_STR);
$stmt->bindValue(':invPrice', $invPrice, PDO::PARAM_STR);
$stmt->bindValue(':invStock', $invStock, PDO::PARAM_STR);
$stmt->bindValue(':invSize', $invSize, PDO::PARAM_STR);
$stmt->bindValue(':invWeight', $invWeight, PDO::PARAM_STR);
$stmt->bindValue(':invLocation', $invLocation, PDO::PARAM_STR);
$stmt->bindValue(':categoryId', $categoryId, PDO::PARAM_STR);
$stmt->bindValue(':invVendor', $invVendor, PDO::PARAM_STR);
$stmt->bindValue(':invStyle', $invStyle, PDO::PARAM_STR);
// Insert the data
$stmt->execute();
// Ask how many rows changed as a result of our insert
$rowsChanged = $stmt->rowCount();
// Close the database interaction
$stmt->closeCursor();
// Return the indication of success (rows changed)
return $rowsChanged;
错误讯息:
Notice: Undefined variable: invName in C:\CIT336\htdocs\acme\model\product-model.php on line 37
Notice: Undefined variable: invDescription in C:\CIT336\htdocs\acme\model\product-model.php on line 38
Notice: Undefined variable: invImage in C:\CIT336\htdocs\acme\model\product-model.php on line 39
Notice: Undefined variable: invThumbnail in C:\CIT336\htdocs\acme\model\product-model.php on line 40
Notice: Undefined variable: invPrice in C:\CIT336\htdocs\acme\model\product-model.php on line 41
Notice: Undefined variable: invStock in C:\CIT336\htdocs\acme\model\product-model.php on line 42
Notice: Undefined variable: invSize in C:\CIT336\htdocs\acme\model\product-model.php on line 43
Notice: Undefined variable: invWeight in C:\CIT336\htdocs\acme\model\product-model.php on line 44
Notice: Undefined variable: invLocation in C:\CIT336\htdocs\acme\model\product-model.php on line 45
Notice: Undefined variable: categoryId in C:\CIT336\htdocs\acme\model\product-model.php on line 46
Notice: Undefined variable: invVendor in C:\CIT336\htdocs\acme\model\product-model.php on line 47
Notice: Undefined variable: invStyle in C:\CIT336\htdocs\acme\model\product-model.php on line 48
Fatal error: Uncaught PDOException: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'invName' cannot be null in C:\CIT336\htdocs\acme\model\product-model.php:50 Stack trace: #0 C:\CIT336\htdocs\acme\model\product-model.php(50): PDOStatement->execute() #1 C:\CIT336\htdocs\acme\products\index.php(158): insPro('Baseball', 'A round ball wi...', 'no-image.png', 'no-image.png', '5', '24', '6', '6', 'San Jose', '15', 'Diamond', 'Nylon') #2 {main} thrown in C:\CIT336\htdocs\acme\model\product-model.php on line 50
我不知道为什么变量将是未定义的,因为我在同一个文件中使用相同语法的类似函数正常工作。
我在代码中做错了什么?
答案 0 :(得分:1)
您的变量未定义,因为该函数不知道存在这些变量。解决该问题的一种方法是将变量作为参数传递给函数。例如:
函数insPro(在这里传递变量){your code goes here}
如果该方法在一个类中,并且这些变量在类范围内可用,那么您不必将它们作为参数传递。您可以将变量修改为如下所示:
$这 - > invName
等等。