2017-05-27 63 views
-1

在试图将本网站放在一起时,编写函数以允许版主添加产品时遇到了问题。我附上了代码和我收到的错误消息。

功能(从产品model.php):
当传递给SQL语句时,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

功能是范围特定的。 – chris85

+0

@ chris85我明白,但功能在范围内 –

+0

函数内部的变量不是。在'insPro'中永远不会定义'$ invName'等。 – chris85

回答

1

您的变量未定义,因为该函数不知道这些变量存在。解决这个问题的一种方法是将变量作为参数传递给你的函数。例如:

功能添汇(通过这里的变量){你的代码放在这里}

如果该方法是一个类中和这些变量是类范围内使用,那么你就不必通过这些测试参数。你会修改变量这样写的:

$这个 - > invName

等。

+0

嗯,我觉得自己像一个白痴......我不能相信我没有把我的变量insPro($ all,$ up,$ in,$ here){}
谢谢。 –

+0

不客气。不要对自己如此刻薄。错误发生。 –